Я не понимаю, почему я могу удалить только последний ЭЛЕМЕНТ моего списка камер
Я могу удалить последний, и даже если он работает, я получаю сообщение об ошибке:
Uncaught (in promise) TypeError: Cannot read property 'innerHTML' of null
at panier.js:43
at Array.forEach (<anonymous>)
at displayBasket (panier.js:42)
поэтому, если удалить последний и обновить, я получил свои 2 камеры (с ошибкой, не могу прочитать). Если я снова удалю последнюю, обновлю и получу последнюю камеру (все еще с ошибкой Cannot Read)
но если я нажимаю SUPPRIMER (удалить на английском языке) только с 1 элементом в моей таблице, он работает без ошибок.
я пытался понять, но я не понимаю.
Помогите пожалуйста :р
async function displayBasket() {
const cameraIds = getCameraIds();
const basket = document.getElementById("panier");
if (cameraIds.length === 0) {
basket.innerHTML = `<p>Votre panier est vide</p>`
} else {
const promises = [];
cameraIds.forEach(cameraId => {
promises.push(getCameraDetails(cameraId))
})
const allCameraDetails = await Promise.all(promises);
const basketTable = document.getElementById("basketTable");
console.info('allCameraDetails', allCameraDetails)
allCameraDetails.forEach((cameraDetails, index) => {
basketTable.innerHTML += `
<tr>
<td><img id = "imageProduct" src = "${cameraDetails.imageUrl}"></td>
<td id = "descriptionProduct">${cameraDetails.name}</td>
<td id = "priceProduct">${(cameraDetails.price / 100).toFixed(2)}</td>
<td><button id = "button-${index}">Supprimer</button></td>
</td>
</tr>
`
buttonProduct = document.getElementById(`button-${index}`);
buttonProduct.addEventListener('click', () => {
const storageCameras = JSON.parse(localStorage.getItem('basketCameras'));
const newStorageCameras = storageCameras.filter(currentCameraId => { return currentCameraId !== cameraDetails._id })
localStorage.setItem('basketCameras', JSON.stringify(newStorageCameras));
basket.innerHTML = ``;
displayBasket();
})
});
}
}
( смотреть скриншот )
Вы также можете вставить HTML?
Это потому, что вы изменяете html корзины, поэтому он каждый раз теряет прослушиватель событий кнопки.
Попробуйте обновить прослушиватели событий после изменения html.
allCameraDetails.forEach((cameraDetails, index) => {
basketTable.innerHTML += `
<tr>
<td><img id = "imageProduct" src = "${cameraDetails.imageUrl}"></td>
<td id = "descriptionProduct">${cameraDetails.name}</td>
<td id = "priceProduct">${(cameraDetails.price / 100).toFixed(2)}</td>
<td><button id = "button-${index}">Supprimer</button></td>
</td>
</tr>
`})
allCameraDetails.forEach((_, index) => {
buttonProduct = document.getElementById(`button-${index}`);
buttonProduct.addEventListener('click', () => {
const storageCameras = JSON.parse(localStorage.getItem('basketCameras'));
const newStorageCameras = storageCameras.filter(currentCameraId => { return currentCameraId !== cameraDetails._id })
localStorage.setItem('basketCameras', JSON.stringify(newStorageCameras));
basket.innerHTML = ``;
displayBasket();
})
})
Если вы удаляете определенный элемент из хранилища и исчезает только последний, это происходит потому, что ваш код не находит этот конкретный элемент, поэтому он удаляет последний.
Пытаться:
у вас есть элементы корзины и корзины в вашей DOM?