我将使用第一个代码块成功地向一组具有相同类的
标签添加事件监听器,但几乎完全相同的第二个代码块却无法移除它们。有人能解释一下这是为什么吗?
他们都选择了具有class为
对于
编辑:我在w3schools页面上看到了关于这个方法的匿名函数不起作用的信息,这有点改变了我的问题。我尝试了以下内容,但它也没有起作用。
let names = document.querySelectorAll('.playerName');
names.forEach((name) => {
name.addEventListener('click', () => {selectSelf(name)});
});
2.
function dropEvents() {
let drops = document.querySelectorAll('.playerName');
drops.forEach((drop) => {
drop.removeEventListener('click', () => {selectSelf(name)});
});
}
他们都选择了具有class为
.playerName
的相同组<div>
标签。在click
事件上运行的selectSelf(name)
函数只将被点击的<div>
的值分配给一个变量,运行一个alert()
(这样我就可以知道它成功运行了),然后立即调用dropEvents()
函数。因此理论上selectSelf(name)
不应该在第一次之后运行,但它确实运行了。对于
.removeEventListener
方法,我尝试了许多不同的变化,但没有成功。编辑:我在w3schools页面上看到了关于这个方法的匿名函数不起作用的信息,这有点改变了我的问题。我尝试了以下内容,但它也没有起作用。
function dropEvents() {
let drops = document.querySelectorAll('.playerName');
drops.forEach((drop) => {
drop.removeEventListener('click', selectSelf);
});
}
removeEventListener
起作用,你必须传递给它与addEventListener
中相同的函数,而不仅仅是具有相同代码的函数。 - JLRishe