我正在构建一个简单的商店页面,我想从购物车中删除这些商品,或者减少和增加。但是我找不到解决方案。我可以将它们添加到购物车中,但无法删除错误所在的项目
Uncaught TypeError: Cannot read property 'inCart' of undefined
at HTMLElement.<anonymous>
(anonymous)
Uncaught TypeError: Cannot read property 'inCart' of undefined
at HTMLElement.<anonymous>
(anonymous)
Uncaught TypeError: Cannot read property 'inCart' of undefined
at HTMLElement.<anonymous> anybody please.
let carts = document.querySelectorAll('.add-cart');
let products = [
{
name: 'TCX ADVANCED PRO 1',
tag: 'bike_giant5',
price:4400,
inCart: 0
},
{
name: 'REVOLT ADVANCED 0',
tag: 'bike_giant6',
price:3650,
inCart: 0
},
{
name: 'REVOLT ADVANCED 1',
tag: 'bike_giant7',
price:2600,
inCart: 0
},
{
name: 'REVOLT E+ PRO',
tag: 'bike_giant8',
price:4200,
inCart: 0
},
{
name: 'EXPLORE E+ 4 GTS',
tag: 'bike_giant9',
price:2500,
inCart: 0
},
{
name: 'TCX ADVANCED',
tag: 'bike_giant10',
price:2550,
inCart: 0
}
];
for(let i=0; i< carts.length; i++) {
carts[i].addEventListener('click', () => {
cartNumbers(products[i]);
totalCost(products[i]);
});
}
function onLoadCartNumbers() {
let productNumbers = localStorage.getItem('cartNumbers');
if( productNumbers ) {
document.querySelector('.cart span').textContent = productNumbers;
}
}
function cartNumbers(product, action) {
let productNumbers = localStorage.getItem('cartNumbers');
productNumbers = parseInt(productNumbers);
let cartItems = localStorage.getItem('productsInCart');
cartItems = JSON.parse(cartItems);
if( action ) {
localStorage.setItem("cartNumbers", productNumbers - 1);
document.querySelector('.cart span').textContent = productNumbers - 1;
console.log("action running");
} else if( productNumbers ) {
localStorage.setItem("cartNumbers", productNumbers + 1);
document.querySelector('.cart span').textContent = productNumbers + 1;
} else {
localStorage.setItem("cartNumbers", 1);
document.querySelector('.cart span').textContent = 1;
}
setItems(product);
}
function setItems(product) {
let productNumbers = localStorage.getItem('cartNumbers');
productNumbers = parseInt(productNumbers);
let cartItems = localStorage.getItem('productsInCart');
cartItems = JSON.parse(cartItems);
if(cartItems != null) {
let currentProduct = product.tag;
if( cartItems[currentProduct] == undefined ) {
cartItems = {
...cartItems,
[currentProduct]: product
}
}
cartItems[currentProduct].inCart += 1;
} else {
product.inCart = 1;
cartItems = {
[product.tag]: product
};
}
localStorage.setItem('productsInCart', JSON.stringify(cartItems));
}
function totalCost( product, action ) {
let cart = localStorage.getItem("totalCost");
if( action) {
cart = parseInt(cart);
localStorage.setItem("totalCost", cart - product.price);
} else if(cart != null) {
cart = parseInt(cart);
localStorage.setItem("totalCost", cart + product.price);
} else {
localStorage.setItem("totalCost", product.price);
}
}
function displayCart() {
let cartItems = localStorage.getItem('productsInCart');
cartItems = JSON.parse(cartItems);
let cart = localStorage.getItem("totalCost");
cart = parseInt(cart);
let productContainer = document.querySelector('.products');
if( cartItems && productContainer ) {
productContainer.innerHTML = '';
Object.values(cartItems).map( (item, index) => {
productContainer.innerHTML +=
`<div class="product"><ion-icon name="close-circle"></ion-icon><img src="./images/bike/${item.tag}.jpg" />
<span class="sm-hide">${item.name}</span>
</div>
<div class="price sm-hide">$${item.price},00</div>
<div class="quantity">
<ion-icon class="decrease " name="arrow-dropleft-circle"></ion-icon>
<span>${item.inCart}</span>
<ion-icon class="increase" name="arrow-dropright-circle"></ion-icon>
</div>
<div class="total">$${item.inCart * item.price},00</div>`;
});
productContainer.innerHTML += `
<div class="basketTotalContainer">
<h4 class="basketTotalTitle">Basket Total</h4>
<h4 class="basketTotal">$${cart},00</h4>
</div>`
deleteButtons();
manageQuantity();
}
}
function manageQuantity() {
let decreaseButtons = document.querySelectorAll('.decrease');
let increaseButtons = document.querySelectorAll('.increase');
let currentQuantity = 0;
let currentProduct = '';
let cartItems = localStorage.getItem('productsInCart');
cartItems = JSON.parse(cartItems);
for(let i=0; i < increaseButtons.length; i++) {
decreaseButtons[i].addEventListener('click', () => {
console.log(cartItems);
currentQuantity = decreaseButtons[i].parentElement.querySelector('span').textContent;
console.log(currentQuantity);
currentProduct = decreaseButtons[i].parentElement.previousElementSibling.previousElementSibling.querySelector('span').textContent.toLocaleLowerCase().replace(/ /g,'').trim();
console.log(currentProduct);
if( cartItems[currentProduct].inCart > 1 ) {
cartItems[currentProduct].inCart -= 1;
cartNumbers(cartItems[currentProduct], "decrease");
totalCost(cartItems[currentProduct], "decrease");
localStorage.setItem('productsInCart', JSON.stringify(cartItems));
displayCart();
}
});
increaseButtons[i].addEventListener('click', () => {
console.log(cartItems);
currentQuantity = increaseButtons[i].parentElement.querySelector('span').textContent;
console.log(currentQuantity);
currentProduct = increaseButtons[i].parentElement.previousElementSibling.previousElementSibling.querySelector('span').textContent.toLocaleLowerCase().replace(/ /g,'').trim();
console.log(currentProduct);
cartItems[currentProduct].inCart += 1;
cartNumbers(cartItems[currentProduct]);
totalCost(cartItems[currentProduct]);
localStorage.setItem('productsInCart', JSON.stringify(cartItems));
displayCart();
});
}
}
function deleteButtons() {
let deleteButtons = document.querySelectorAll('.product ion-icon');
let productNumbers = localStorage.getItem('cartNumbers');
let cartCost = localStorage.getItem("totalCost");
let cartItems = localStorage.getItem('productsInCart');
cartItems = JSON.parse(cartItems);
let productName;
console.log(cartItems);
for(let i=0; i < deleteButtons.length; i++) {
deleteButtons[i].addEventListener('click', () => {
productName = deleteButtons[i].parentElement.textContent.toLocaleLowerCase().replace(/ /g,'').trim();
localStorage.setItem('cartNumbers', productNumbers - cartItems[productName].inCart);
localStorage.setItem('totalCost', cartCost - ( cartItems[productName].price * cartItems[productName].inCart));
delete cartItems[productName];
localStorage.setItem('productsInCart', JSON.stringify(cartItems));
displayCart();
onLoadCartNumbers();
})
}
}
onLoadCartNumbers();
displayCart();
<li><a href="cart.html"><ion-icon name="basket"></ion-icon>Cart<span>0</span></a></li>
<div class="grid-container">
<div class="item1"><div class="overlay">TCX ADVANCED PRO 1<br>
4,400$<br><button class="add-cart">Click</button></div></div>
<div class="item2"><div class="overlay">REVOLT ADVANCED 0<br>
3,650$<br><button class="add-cart">Click</button></div></div>
<div class="item3"><div class="overlay">REVOLT ADVANCED 1<br>
2,600$<br><button class="add-cart">Click</button></div></div>
<div class="item4"><div class="overlay">REVOLT E+ PRO<br>
4,200$<br><button class="add-cart">Click</button></div></div>
<div class="item5"><div class="overlay">EXPLORE E+ 4 GTS<br>
2,500$<br><button class="add-cart">Click</button></div></div>
<div class="item6"><div class="overlay">TCX ADVANCED<br>
2,550$<br><button class="add-cart">Click</button></div></div>
</div>
答案 0 :(得分:0)
从产品名称中删除空格 让产品= [
{ 名称:“ TCX-ADVANCED-PRO-1”, 标签:“ bike_giant5”, 价格:4400, 购物车:0 }