我正在创建一个购物车,用户可以将商品添加到购物车。用户点击addtocart按钮后,我想将产品ID,名称,价格和数量保存到本地存储,然后在购物车页面上检索它们。所以我尝试了这个
var cart = new Array;
if (cart != []) {
cart = JSON.parse(localStorage["cart"]);
}
$('#addtocart').on('click', function(e) {
var qty = document.getElementById("p-qty").value;
var li = $(this).parent();
var product = {};
product.id = productid;
product.name = document.getElementById("nomenclature").innerHTML;
product.price = document.getElementById("productprice").innerHTML;
product.quantity = qty;
addToCart(product);
});
function addToCart(product) {
// Retrieve the cart object from local storage
if (localStorage) {
var cart = JSON.parse(localStorage['cart']);
cart.push(product);
localStorage.setItem('cart', JSON.stringify(cart));
}
// window.location = "html/cart.html"
}
但我一直收到此错误
未捕获的TypeError:cart.push不是函数
我做错了什么,我该如何解决?
答案 0 :(得分:2)
您不检查localStorage ['cart']是否已定义,并且不检查反序列化变量是否为数组。我建议做这样的事情:
function addToCart(product) {
if (localStorage) {
var cart;
if (!localStorage['cart']) cart = [];
else cart = JSON.parse(localStorage['cart']);
if (!(cart instanceof Array)) cart = [];
cart.push(product);
localStorage.setItem('cart', JSON.stringify(cart));
}
}
但是,请注意,如果localStorage['cart']
中有序列化对象或其他非数组变量,则会使用此方法覆盖它。
答案 1 :(得分:1)
现在有了你的编辑,你在这里遇到的问题是没有意义的。首先将数组设置为空,因此它始终为空。现在第二个问题是 MON TOTAL STREAK_COUNT WANTED RESULT
1/2/1992 1.123077 1 1.123077 (only 1 so 1.12)
2/3/1992 -1.296718 0
3/2/1992 -6.355612 2 -7.65233 (sum of -1.29 and -6.35)
4/1/1992 5.634692 0
5/1/1992 4.180605 2 9.815297 (sum of 5.63 and 4.18)
7/1/1992 -0.101016 0
8/3/1992 -0.706125 2 -0.807141 (sum of -.10 and -.706)
10/1/1992 0.368579 0
11/2/1992 3.822277 0
1/4/1993 2.233359 0
2/1/1993 15.219644 4 21.643859
3/1/1993 -2.647693 1 -2.647693
4/1/1993 1.599094 1 1.599094
永远不会等于[]
因此它将始终进入if语句。由于您可能从未将new Array
设置为任何内容,因此它将无效。
localStorage["cart"]
所以你需要做的就是摆脱它,因为它什么都不做。接下来,您只需要检查localstorage是否有值,如果没有,则将其设置为一个情感数组。因此添加一个条件,如果未定义,则使用新数组
现在你的密码应该是什么
var cart = new Array; // <-- you define an array?
if (cart != []) { // <- than you check the array you just created? How would it have a value if this check would actually work?
cart = JSON.parse(localStorage["cart"]);
}
或其他方式可能
var cart = []; //define the array
if (localStorage["cart"]) { // Check that it has a value in storage
cart = JSON.parse(localStorage["cart"]); //If yes, parse it
}
答案 2 :(得分:1)
localStorage 是对象,您可以使用 .setItem()设置项目,并通过 .getItem()获取项目
Demo获取旧值,推送新值并使用localStorage保存值
var Values = [];
//get olds values
Values = JSON.parse(localStorage.getItem('Storage'));
//push new value
Values.push(item);
//saved values
localStorage.setItem('Storage', JSON.stringify(Values));