2014-01-24 180 views
-2

我在嘗試使拖放購物車。在互聯網上的某個網站的幫助下,我可以將商品添加到購物車中,並計算總價格。但我無法從購物車中刪除選定的物品。我對JavaScript和html5很陌生,所以請幫助我。如何從列表中刪除項目?

代碼:

<script> 
     function addEvent(element, event, delegate) { 
     if (typeof (window.event) != 'undefined' && element.attachEvent) 
     element.attachEvent('on' + event, delegate); 
     else 
     element.addEventListener(event, delegate, false); 
     } 

     addEvent(document, 'readystatechange', function() { 
     if (document.readyState !== "complete") 
     return true; 

     var items = document.querySelectorAll("section.products ul li"); 
     var cart = document.querySelectorAll("#cart ul")[0]; 

      function updateCart(){ 
     var total = 0.0; 
     var cart_items = document.querySelectorAll("#cart ul li") 
     for (var i = 0; i < cart_items.length; i++) { 
     var cart_item = cart_items[i]; 
     var quantity = cart_item.getAttribute('data-quantity'); 
     var price = cart_item.getAttribute('data-price'); 

     var sub_total = parseFloat(quantity * parseFloat(price)); 
     cart_item.querySelectorAll("span.sub-total")[0].innerHTML = " = " + sub_total.toFixed(2); 

     total += sub_total; 
     } 

     document.querySelectorAll("#cart span.total")[0].innerHTML = total.toFixed(2); 
     } 

     function addCartItem(item, id) { 
     var clone = item.cloneNode(true); 
     clone.setAttribute('data-id', id); 
     clone.setAttribute('data-quantity', 1); 

     var btn=document.createElement('BUTTON'); 
    btn.className = 'remove-item'; 
    var t=document.createTextNode("X"); 
    btn.appendChild(t); 
    cart.appendChild(btn); 
     clone.removeAttribute('id'); 

     fragment = document.createElement('span'); 
     fragment.setAttribute('class', 'sub-total'); 
     clone.appendChild(fragment);      
     cart.appendChild(clone); 

$('#product').on('click','.remove-item',function(){ 
     $(this).closest('li').remove();// remove the closest li item row 
    }); 

     } 

     function updateCartItem(item){ 
     var quantity = item.getAttribute('data-quantity'); 
     quantity = parseInt(quantity) + 1 
     item.setAttribute('data-quantity', quantity); 
     var span = item.querySelectorAll('span.quantity'); 
     span[0].innerHTML = ' x ' + quantity; 
     } 

     function onDrop(event){   
     if(event.preventDefault) event.preventDefault(); 
     if (event.stopPropagation) event.stopPropagation(); 
     else event.cancelBubble = true; 

     var id = event.dataTransfer.getData("Text"); 
     var item = document.getElementById(id);   

     var exists = document.querySelectorAll("#cart ul li[data-id='" + id + "']"); 

     if(exists.length > 0){ 
     alert("Already present"); 
     } else { 
     addCartItem(item, id); 
     } 

     updateCart(); 

     return false; 
     } 

     function onDragOver(event){ 
     if(event.preventDefault) event.preventDefault(); 
     if (event.stopPropagation) event.stopPropagation(); 
     else event.cancelBubble = true; 
     return false; 
     } 
     addEvent(cart, 'drop', onDrop); 
     addEvent(cart, 'dragover', onDragOver); 

     function onDrag(event){ 
     event.dataTransfer.effectAllowed = "move"; 
     event.dataTransfer.dropEffect = "move"; 
     var target = event.target || event.srcElement; 
     var success = event.dataTransfer.setData('Text', target.id); 
     } 


     for (var i = 0; i < items.length; i++) { 
     var item = items[i]; 
     item.setAttribute("draggable", "true"); 
     addEvent(item, 'dragstart', onDrag); 
     }; 
    }); 
    </script> 

<section id="product"> 
<ul class="clear"> 
<li data-id="1"> 
<a href="#"> 
<img src="a.jpg" alt=""> 
<h3>item 1</h3> 
<p>xyz</p> 
</a> 
</li> 
</ul> 
</secton>  

和css是:

<style> 
ul, li{ 
list-style: none; 
margin: 0px; 
padding: 0px; 
cursor: pointer; 
} 

section#cart ul{ 

height: 200px; 

overflow: auto; 
background-color: #cccccc; 
} 
</style> 
+0

你能告訴我們你已經嘗試過什麼,什麼樣的結果你得到,你認爲可能是什麼問題? – Ziggy

+0

您似乎缺少一個DOM準備好的處理程序$()。click() – Anton

+0

問題是,如果通過將其添加到購物車中,它將添加到購物車中,但是當我單擊刪除按鈕時,它不會從list @Ziggy – user2809576

回答

1

我假設你擁有的每一件產品在包裹在裏列表-標籤。

在這種情況下,你可以將一個監聽器,每個立標記,刪除該元素從DOM,像這樣:

$(document).ready(function() { // Makes sure the DOM is ready before you attach handlers. 
    $("li").on("click", function() { // Will attach this event handler to every <LI> item. 
    $(this).remove(); // Remove the <LI> that you clicked on 
    }); 
}); 
+0

它會刪除該項目,但是當我點擊該項目的圖標並且按鈕仍然存在時。但是我希望當我點擊'X'按鈕時,列表項將隨刪除按鈕一起刪除 – user2809576