javascript - 单击“添加到购物车”时如何检查产品是否已在购物车中并且不重复它(JavaScript localStorage Cart)

标签 javascript jquery

我正在玩这个 JavaScript 购物车,它非常漂亮: https://github.com/gabrieleromanato/jQuery-sessionStorage-shopping-cart

它运行良好,只是我不知道添加到购物车时如何防止产品重复。

我是 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,但仅此而已。

我不太了解 session 和对象,因此希望在有人能够提供帮助的情况下了解一些相关知识。

任何帮助将不胜感激。

干杯

最佳答案

看起来您需要添加以下内容: (假设购物车类别为“cart”,否则请更改)

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

可能将其放在所有内容周围的 $form.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函数的末尾,以便在添加项目后重新检查。

关于javascript - 单击“添加到购物车”时如何检查产品是否已在购物车中并且不重复它(JavaScript localStorage Cart),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148133/

相关文章:

javascript - 在客户端重用 JavaScript 代码(node.js、express)

javascript - Nginx、React、Node & Let's Encrypt……如何将 Nginx 指向我的 React 应用程序

php - 将变量传递给外部 PHP 文件

javascript - 如何选择另一个元素内的一个元素?

javascript - 如何获取字符串中美元符号之间的值?

javascript - 同位素 translate3d 值增加

javascript - 无法将表单提交到 PHP 脚本

javascript - SVG渲染器函数

javascript - 如果不卸载网格,JqGrid 重新加载将无法正常工作

javascript - 谷歌地图不出现在模态弹出窗口中