javascript - 如何在本地存储中存储和检索购物车商品?

标签 javascript jquery html

我正在为电子商务网站创建购物车,并希望将产品存储在浏览器本地存储中。

我已在代码中实现了以下函数来添加和检索产品

addToCart() 是每次按下“添加到购物车”按钮时启动的函数。
addProduct() 将每个产品添加到 cartList。
getProductsFromLocalStorage() 从 localStorage 检索产品并将产品添加到 cartList。

  function addToCart(trigger) {
    var cartIsEmpty = cartWrapper.hasClass('empty');
    //get localstorage cart product list
    getProductsFromLocalStorage();
    //update cart product list
    addProduct();
    //update number of items
    updateCartCount(cartIsEmpty);
    //update total price
    updateCartTotal(trigger.data('price'), true);
    //show cart
    cartWrapper.removeClass('empty');
  }

  function addProduct() {

    productId = productId + 1;
    var productName = document.getElementById('reebok').innerHTML;
    var productPrice = document.getElementById('p_price').getAttribute('data- value');
    var image = document.getElementById("main_img").src;
    var productSize = document.getElementById('size').value;
    var productColor = document.getElementById('color').value;
    value = parseFloat(productPrice).toFixed(2);

    var productAdded = $('<li class="product"><div class="product-image"><a href="#0"><img src="'+ image +'" alt="placeholder"></a></div><div class="product-details"><h3><a href="#0">' + productName + '</a></h3><span class="price">'+ productPrice +'</span><div class="actions"><a href="#0" class="delete-item">Delete</a><a class="delete-item">'+ productSize +'</a><a class="delete-item">'+ productColor +'</a><div class="quantity"><label for="cd-product-' + productId + '">Qty</label><span class="select"><select id="cd-product-' + productId + '" name="quantity"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option></select></span></div></div></div></li>');

    cartList.append(productAdded);

    let products = [{'productId' : productId + 1, image : image, name : productName, price: productPrice, size: productSize, color: productColor}];

    localStorage.setItem('products', JSON.stringify(products));

  }

  function getProductsFromLocalStorage() {
    const cs = localStorage.getItem('products');
    if (cs === null) {
      addProduct();
    } else {
      $.each(cs.products, function(key, value) {
        cartList.prepend($('<li class="product"><div class="product-image"><a href="#0"><img src="'+ value.image +'" alt="placeholder"></a></div><div class="product-details"><h3><a href="#0">' + value.name + '</a></h3><span class="price">${value.price}</span><div class="actions"><a href="#0" class="delete-item">Delete</a><a class="delete-item">' + value.size + '</a><a class="delete-item">' + value.color + '</a><div class="quantity"><label for="cd-product-' + value.productId + '">Qty</label><span class="select"><select id="cd-product-' + value.productId + '" name="quantity"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option></select></span></div></div></div></li>'));
      });
    }
  }

我现在遇到了无法从本地存储检索购物车商品并将其与新商品一起添加到购物车的问题。这意味着购物车项目保存在存储中,但当我尝试添加新项目时,我看到一个空白购物车,如下所示:

Screenshot of Shopping Cart

此代码的演示位于 https://codyhouse.co/demo/add-to-cart-interaction/index.html .

感谢您的帮助,

詹姆斯。

最佳答案

您应该使用浏览器的本地存储。

在函数 addProduct 中,您应该将产品数组添加到本地存储项,例如 products;像这样:

function addProduct(){
    let products = [];
    if(localStorage.getItem('products')){
        products = JSON.parse(localStorage.getItem('products'));
    }
    products.push({'productId' : productId + 1, image : '<imageLink>'});
    localStorage.setItem('products', JSON.stringify(products));
}

如果您想删除产品,可以这样做:

function removeProduct(productId){

    // Your logic for your app.

    // strore products in local storage

    let storageProducts = JSON.parse(localStorage.getItem('products'));
    let products = storageProducts.filter(product => product.productId !== productId );
    localStorage.setItem('products', JSON.stringify(products));
}

请检查此fiddle用于工作演示。

关于javascript - 如何在本地存储中存储和检索购物车商品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55328748/

相关文章:

javascript - 设置javascript文件的路径?

javascript - 以 Angular 生成 JSON 对象的聚合数组

javascript - 您可以向 Kendo 窗口添加模态背景吗?

css - 我想制作一个粘性页脚,但长页面很难做到

javascript - 在白色背景 div 下推送页脚

javascript - 数据表 Colvis 响应式

javascript - 如何在JS中的屏幕右上角插入一个 float 按钮

javascript - 在 jQuery 中使用 ReplaceWith() 时出现奇怪的行为

jquery - 在 jquery ui 对话框中,如何更改单个模式对话框后面的颜色/契约(Contract)

javascript - 在同一页面上提交表单而无需重新加载并使用 POST 变量