有一个购物车。将产品添加到购物车时,会创建Product_on_basket类的实例。接下来,我们通过add_to_cart_list函数将所有实例收集到一个数组中。
打开购物车时,用户会看到添加的产品列表和总价。cart函数绘制购物车的内容, **pluser ** 函数将总数相加。
当从购物车中移除商品时,我们会从cart_list数组中移除该对象,并且购物车函数会重新绘制购物车的内容。问题是当从购物车中移除所有产品时,总金额不等于 0,但仍然等于移除前剩余的最后一件商品的总和。这是为什么?如何绕过它?
class Product_on_basket {
// класс содержит характеристики продукта в корзине
static counter = 0;
constructor(id, name, price) {
this.id = id;
this.name = name;
this.price = price;
++Product_on_basket.counter;
}
}
function add_to_cart_list(id, name, price){
// функция при добавлении продукта в корзину создает новый объект
// корзины и добавляет его в массив
const product = new Product_on_basket(id, name, price);
cart_list.push(product);
}
function cart(){
// функция отрисовывает содержимое корзины: список продуктов и
// общую цену
let ul = document.getElementById('shoping_cart_list');
ul.innerHTML = '';
for (product in cart_list) {
let li = document.createElement('li');
li.setAttribute('id', `product_cart_id_${cart_list[product].id}`);
li.innerHTML = `
${cart_list[product].name} -
<span class='cart_price'> ${cart_list[product].price}</span> руб
<button type='button' class='btn btn-outline-primary'
onclick='cart_list.splice(product); cart(); console.log(cart_list.length)'
>
X
</button>`;
ul.appendChild(li);
let p = document.getElementById('total_price');
p.innerHTML = `Итог: <span id='price'>${pluser()}</span> руб`;
}
}
function pluser(){
// функция возвращает сумму цены товаров в корзине
let total_price = 0;
for (let i = 0; i < cart_list.length; i++) {
total_price += parseFloat(cart_list[i].price);
}
return total_price.toFixed(2);
}
问题很简单地解决了:错误地指定了花括号。
当您从购物车中删除所有商品并且包含产品的数组为空时,渲染产品列表的循环无法正常工作并在我们调用pluser函数之前停止,因此它不会重新计算商品的总数量购物车。
我刚刚从for循环中省略了带有pluser函数的块。