【发布时间】:2021-08-24 04:28:43
【问题描述】:
我想使用购物车中的 localStorage 将产品添加到购物车中。 如何保存项目并将它们附加到购物车列表中。 如果购物车在主页中,我可以显示项目,但如果我想显示添加到其他页面或 cart.html(单独页面)的项目,我需要 localStorage。我不知道如何将这些动态列表项存储在 localStorage 中。
购物车.html
<div id="cart">
<div class="divider-header">
<p class="cart-heading"><i class="fa fa-shopping-bag"><span class="badge shopping-bag-badge">0</span></i>Your Cart</p>
<a href="#" class="closebtn closecart">
<div><span id="first"></span><span id="second"></span></div></a>
</div>
<div id="empty-cart">
<img src="images/empty-cart.png" alt="">
<h3>Your Cart is Empty!</h3>
<small>Looks like you haven't added anything to your cart yet</small>
<a href="#">Continue Shopping</a>
</div>
<!--Cart List-->
<ul id="cartList">
</ul>
<p id="shipping_text">Shipping Cost : $2</p>
<p id="total_amount_text">Total Amount : <span></span></p>
<a type="button" id="checkout">Check Out</a>
<a type="button" id="clear-cart">Clear Cart</a>
</div>
//首页的项目
<div><img class="skincare-soapimg" src="images/skincaresoap4.png" alt=""></div>
<p class="skincare-soapname">Skin Paradise</p>
<p class="skincare-soapprice">$23</p>
<a class="slider-btn addToCart" type="button" data-id="4" data-image="images/skincaresoap4.png"
data-price="$23" data-name="Skin Paradise" data-quantity="1" data-weight="150g" data-availability="In Stock">SHOP NOW</a>
</div>
jQuery 代码 $(".addToCart").click(function(){
// animate button
var total = 0;
var shipping = 2;
var flag = 0;
//check if cart is empty to remove empty cart view
if( ($("#cartList").has("li").length === 0) ) {
$("#empty-cart").css("display","none");}
//Get all data of item to be added
var id= $(this).data("id");
var price= $(this).data("price");
var image = $(this).data('image');
var name = $(this).data("name");
var quantity = $(this).data("quantity");
var availability = $(this).data("availability");
var weight = $(this).data("weight");
//Traverse the cart list to check if item already exists or not
$( "#cartList li" ).each(function( index) {
var matched = $( this ).find(".id").text();
if (matched == id){
var increment= $( this ).find(".quantity").val();
increment++;
flag = 1;
$( this ).find(".quantity").val(increment);
return false;
}
});
//Add new Item in cart
if(flag == 0){
var cartItem= $("<li class='newItem'> <p class='id'>"+id+"</p><div class='picture'><img src='"+ image +"' ></div> <div class='details'><p class='name'>"+name+"</p><span class='weight'>"+weight+"</span><span> /</span> <span class='avail'>"+availability+"</span> <p class='price'>"+price+"</p><a type='button' class='inc'>+</a><input type='text' class='quantity' pattern='[0-9]+' value="+quantity+" ><a type='button' class='dec'>-</a></div> <a type='button' class='removeItem'><i class='fa fa-trash'></i></a></li>");
//increment in badge icon number when new item added in cart
var counterInc = parseInt($(".badge").html()) + 1;
$(".badge").html(counterInc);
}
})
【问题讨论】:
-
嗨,这里的问题似乎是 UI 与域逻辑没有分离。如果您有购物车列表,您可以简单地将购物车存储在 localStorage 中 - 并在执行 UI 操作时重用相同的购物车。要进行基本检查,例如查看购物车是否为空,您必须使用 Jquery 遍历 UI 层 - 情况不应该如此。购物车是否为空与 UI 无关,并且应该没有 jquery。我宁愿先进行这种分离-其余的应该变得微不足道。 :)
标签: javascript html jquery local-storage shopping-cart