感谢@david指出了一些如何计算标识符而不是属性的方法。
我重写了使用对象数组的逻辑,使之更简单。现在,这项工作没有意外的行为。
var cart = [];
var discount = 0;
var total = 0;
var incBtn = $('.inc-btn');
var dincBtn = $('.dinc-btn');
var checkout = $('#checkout');
var stripe = $('#stripe');
var cartSummary = $('#total-cost');
incBtn.click(function() {
var id = $(this).attr('itemid');
var cost = $(this).attr('cost');
var item = cart.filter(function(x) {
return x.id == id;
});
if(item.length > 0) {
$('#total-' + id).text(++cart[cart.indexOf(item[0])].quantity)
updateCheckout();
return;
}
cart.push({ id: id, quantity: 1, cost: cost});
$('#total-' + id).text(cart[cart.length -1].quantity);
updateCheckout();
});
dincBtn.click(function() {
var id = $(this).attr('itemid');
var item = cart.filter(function(x) {
return x.id == id;
});
if(item.length > 0) {
if(cart[cart.indexOf(item[0])].quantity > 0) {
$('#total-' + id).text(--cart[cart.indexOf(item[0])].quantity);
updateCheckout();
return;
}
$('#total-' + id).text(0);
updateCheckout();
}
});
function updateCheckout() {
checkout.text('');
total = 0;
cart.forEach(function(item) {
checkout.append('<tr><td>' + item.id + '</td><td>$' + (item.quantity * item.cost).toFixed(2) + '</td></tr>');
total = (item.quantity * item.cost) + total;
});
cartSummary.text(total.toFixed(2));
}