【发布时间】:2021-12-29 19:12:02
【问题描述】:
我正在尝试将项目添加到存储到 sessionStorage 的数组中。 add 函数应该检查数组中是否有匹配的值,如果有,则添加到该项目的计数中。如果没有,它应该将项目推送到数组上。
由于某种原因,这两个函数本身工作得非常好,但是当在 if/else 语句中组合时,它要么不会将项目推送到数组中,要么会添加到计数中并将副本推送到数组中。
我尝试了两种不同的方法。
我是 JavaScript 和 jQuery 新手,如果有任何见解,我将不胜感激。
方法一:
$(".prodItem").on("click", ".addCart", function (e) {
cart = JSON.parse(sessionStorage.getItem('shopCart'));
let selectedProd = $(e.target).closest('.prodItem').find('.prodName').html();
console.log(selectedProd);
let selectedPrice = $(this).siblings('.price').html();
console.log(selectedPrice);
let count = 1;
$.each(cart, function (index, value) {
if (selectedProd === value.prod) {
value.count++;
console.log(selectedProd);
console.log(value.prod);
storeCart();
return;
}
});
if ($.inArray(selectedProd, cart) !== -1) {
// Add new product object to array
let currentProd = new product(
selectedProd,
count++,
selectedPrice);
cart.push(currentProd);
}
// Save array to sessionStorage
storeCart();
});
方法二:
$(".prodItem").on("click", ".addCart", function (e) {
cart = JSON.parse(sessionStorage.getItem('shopCart'));
let selectedProd = $(e.target).closest('.prodItem').find('.prodName').html();
console.log(selectedProd);
let selectedPrice = $(this).siblings('.price').html();
console.log(selectedPrice);
let count = 1;
for (let i = 0; i < cart.length; i++) {
if (selectedProd === cart[i].prod) {
value.count++;
console.log(selectedProd);
console.log(value.prod);
storeCart();
return;
} else {
let currentProd = new product(
selectedProd,
count++,
selectedPrice);
cart.push(currentProd);
}
}
// Save array to sessionStorage
storeCart();
});
HTML:
<div class="col-4 prodimg prodItem">
<div class="card bg-light text-white rounded-circle shadow">
<img class="card-img rounded-circle shadow" src="images/sofas/freud-sofa-1.jpg"
alt="Camel coloured, corduroy Freud sofa">
<div class="card-img-overlay crdimg" id="">
<input class="form-check-input d-none" type="checkbox" id="checkboxFreud" value="" aria-label="...">
<label class="card-title form-check" for="checkboxFreud">
<h3 class="prodName">Frued Sofa</h3>
</label>
<label class="card-text form-check" for="checkboxFreud">
<p>This piece is the perfect fit to liven up any space.<br>A comfortable six-seater with durable
corduroy upholstery.<br><br>R<span class="price">56 988.00</span> (incl. VAT)<i
class="btn bi bi-cart-plus ml-4 addCart"></i></p>
</label>
</div>
</div>
</div>
**注意:空的购物车数组是在本节之前创建和存储的。
【问题讨论】:
-
@RandyCasburn 这是因为 .html() 返回:String - 描述:获取匹配元素集中第一个元素的 HTML 内容。
-
@RandyCasburn 购物车数组由 selectedProd 填充,那么苹果在这个过程中的哪个位置变成了橙色,有没有办法解决它?
-
@RandyCasburn 我认为您不理解这个问题,因为我的函数的这一部分运行良好,并且两个 console.logs 返回相同的值。不过感谢您的尝试。
-
你是对的,所以这条语句
$.inArray(selectedProd, cart)- 正在查看product对象的数组并试图找到selectedProd-selectedProd是product对象吗?还是您希望.isArray()以某种方式在对象属性列表中找到一个字符串? -
你有没有试过用这个方法检查数组中是否存在?它将帮助您检查数组中是否存在值。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript jquery arrays json