2016-12-14 45 views
1

我玩弄這個JavaScript車是非常漂亮: https://github.com/gabrieleromanato/jQuery-sessionStorage-shopping-cart如何檢查,如果產品已經在車,而不是重複它添加到購物車,當點擊(JavaScript的localStorage的車)

它運作良好除了在添加到購物車時不知道如何防止產品重複。

我是JS的新手,所以對別人來說顯而易見的東西不會對我有用。

我不知道在哪裏做出準確的修改,下面是一些可疑地區看:

// Adds items to the shopping cart 
handleAddToCartForm: function() { 
    var self = this; 
    self.$formAddToCart.each(function() { 
     var $form = $(this); 
     var $product = $form.parent(); 
     var price = self._convertString($product.data("price")); 
     var name = $product.data("name"); 
     var image = $product.data("image"); 
     var url = $product.data("url"); 

     $form.on("submit", function() { 
      var qty = self._convertString($form.find(".qty").val()); 
      var subTotal = qty * price; 
      var total = self._convertString(self.storage.getItem(self.total)); 
      var sTotal = total + subTotal; 
      self.storage.setItem(self.total, sTotal); 
      self._addToCart({ 
       product: name, 
       image: image, 
       url: url, 
       price: price, 
       qty: qty 
      }); 
      var shipping = self._convertString(self.storage.getItem(self.shippingRates)); 
      var shippingRates = self._calculateShipping(qty); 
      var totalShipping = shipping + shippingRates; 

      self.storage.setItem(self.shippingRates, totalShipping); 
     }); 
    }); 
}, 

/* Add an object to the cart as a JSON string 
* @param values Object the object to be added to the cart 
* @returns void 
*/ 

_addToCart: function(values) { 
    var cart = this.storage.getItem(this.cartName); 

    var cartObject = this._toJSONObject(cart); 
    var cartCopy = cartObject; 
    var items = cartCopy.items; 
    items.push(values); 

    this.storage.setItem(this.cartName, this._toJSONString(cartCopy)); 
}, 

我已經修改了原代碼,包括產品形象和URL,但是這是它。

我不太瞭解會話和對象,所以希望能夠學習一點,如果有人能夠幫助。

任何幫助將不勝感激。

乾杯

+1

當購物車中有物品時,購物車HTML是什麼樣的?項目行是否有某種與產品相關的屬性? – Craig

+1

等等,所以你不想讓我一次購買兩件同樣的東西?我必須退房,回去,並再次退房?看起來像一個不好的用戶體驗。你可能想要修改_addToCart,我不完全確定如何構造所有東西,所以我不知道你需要如何檢查...... console.log(項目)給你什麼? – Gerrit0

+0

爲什麼不通過「物品」加入購物車並查看產品名稱是否存在? – Vinny

回答

0

看起來你需要添加類似: (假設車類的「購物車」,改變這種以其他方式)

if($('.cart td.name p').indexOf(name) == -1) { 
    // Item not already in the cart 
} 

可能提出的是,在$形式.on('submit')圍繞一切,如果那是代碼實際上將它添加到購物車的地方。你可能想告訴客戶爲什麼他們不能再添加。

更好的解決方案可能是在頁面加載時檢查購物車中的物品,並隱藏/禁用現有物品的「添加到購物車」按鈕。

EG:

function checkCartItems(){ 
    $('.cart td.name p').each(function(){ 
     var itemName = $(this).text(); 
     $('[data-name="'+itemName+'"]').addClass('disabled').attr('disabled', 'disabled'); 
    }); 
} 
checkCartItems(); 

,然後添加「checkCartItems()」結束addToCart函數來重新檢查被添加的項目後。

相關問題