Почему при удалении всех товаров из корзины общая сумма не равна нулю?
Существует корзина с покупками. При добавлении товара в корзину создается экземпляр класса Product_on_basket. Далее собираем все экземпляры в массив через функцию add_to_cart_list.
При открытии корзины пользователь видит список добавленных продуктов и общую цену. Функция cart отрисовывает содержимое корзины, а функция **pluser **суммирует общую сумму.
При удалении товара из корзины мы удаляем из массива cart_list объект, и функция cart заново отрисовывает содержимое корзины. Проблема в том, что при удалении всех продуктов из корзины общая сумма не равняется нулю, а остается равной суммой последнего оставшегося до удаления элемента. Почему так? Как это обойти?
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);
}
Ответы (1 шт):
Проблема решилась довольно просто: были не верно указаны фигурные скобки.
Когда удаляешь все товары из корзины и массив с продуктами пуст, то цикл с отрисовкой списка продуктов не отрабатывает штатно и останавливается до того, как мы вызываем функцию pluser, и поэтому она не пересчитывала общую сумму товаров в корзине.
Я просто исключил из цикла for блок с функцией pluser.
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> руб`;
}