如何使用forEach删除事件监听器

3

如何在创建forEach循环中的事件监听器后删除事件监听器? forEach循环立即运行,我要确定是否应该删除事件的条件也立即运行。

function play(){
    let arr = document.querySelectorAll(".box");
    let remove = false;
    arr.forEach((value,index)=> {
        value.addEventListener("click", () => {
            remove = true;
        });
    }
    if(remove === true){
        arr.forEach((value, index)=>{
            value.removeEventListener("click", ()=>{

            });
            })
        }
    }

你想要在什么时候删除事件监听器?是在第一次点击后吗? - void
然后不要立即执行删除条件。 - Manish
1
removeEventListener 需要传递给 addEventListener 的原始函数,而不是类似的函数。因此,在当前的代码中,您需要删除该元素并重新添加它。 - Patrick Evans
1个回答

6

removeEventListener需要使用与addEventListener相同的函数进行调用。您不能使用匿名函数,因为每个实例都是不同的函数。定义一个具有名称的函数并使用它。

function myClickHandler() {
    remove = true;
}
arr.forEach(value => value.addEventListener("click", myClickHandler));
if (remove) {
    arr.forEach(value => value.removeEventListener("click", myClickHandler);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接