EventListener 未添加到按钮元素

问题描述 投票:0回答:1

我有一个产品列表,每个产品都有

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
。为什么事件侦听器仅添加到最后一个按钮元素而不是每个按钮?我在这里错过了什么吗?谢谢您的宝贵时间。

javascript html dom dom-events
1个回答
0
投票

根据

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);

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.