我有一个产品列表,每个产品都有
id
和 item
属性。我必须为每个项目添加一个删除按钮。每次点击删除按钮,该产品都应该被删除。
我正在尝试循环遍历列表,并为每个产品创建一个
button
元素并将其 id
属性设置为产品的 id
。
但是,由于某种原因,事件侦听器没有添加到除最后一个按钮 (
button#5
) 之外的按钮。
下面是我写的JS代码..
const div = document.body.querySelector('div');
let products = [
{
id: "1",
item: "Shirt"
},
{
id: "2",
item: "Jeans"
},
{
id: "3",
item: "T-shirt"
},
{
id: "4",
item: "Denim Jacket"
},
{
id: "5",
item: "Casual Shoes"
}
];
const removeItem = (itemId) => {
products = products.filter((prod) => {
return prod.id !== itemId;
})
console.log(products)
updateDom();
}
function updateDom() {
div.innerHTML = '';
div.style.padding = '20px';
for (let prod of products) {
let btn = document.createElement('button');
btn.id = prod.id;
btn.textContent = 'Remove';
btn.addEventListener('click', () => {
removeItem(btn.id);
console.log(btn.id);
})
div.innerHTML += `<li>${prod.item}</li> `
div.appendChild(btn);
}
}
updateDom();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div></div>
<script src="prac.js"></script>
</body>
</html>
上面是
html
代码,我试图将 li
和 button
元素附加到 div
。为什么事件侦听器仅添加到最后一个按钮元素而不是每个按钮?我在这里错过了什么吗?谢谢您的宝贵时间。
根据
Jaromanda X
的描述,我给出我的解决方案:
function updateDom() {
div.innerHTML = '';
div.style.padding = '20px';
for (let prod of products) {
let btn = document.createElement('button');
btn.id = prod.id;
btn.textContent = 'Remove';
btn.addEventListener('click', () => {
removeItem(btn.id);
console.log(btn.id);
});
let li=document.createElement("li");
li.textContent=prod.item;
div.appendChild(li);
div.appendChild(btn);
}
}