【发布时间】:2021-08-23 04:47:38
【问题描述】:
我使用“For 循环”来创建多个“事件处理函数”。这些函数具有相同的名称。例如: 代码:
for(let x in array){
element[x].addEventListener('click',eventhandler)
function eventhandler(){
bla bla....
for(let x in array){
element[x].removeEventListener('click',eventhandler)/*this line doesn't work*/
}
}
}
我现在如何删除所有这些事件侦听器? element[x].removeEventListener('click',eventhandler) 不起作用:(
【问题讨论】:
-
将事件对象传递给处理程序,然后执行
event.currentTarget.removeEventListener('click', eventhandler);。另请注意,您必须将函数拉出循环,或将定义传递给addEventListener。 -
但是对于数组中的每个'x'我必须创建一个新函数。所以该函数需要在for循环中。
-
你不应该在数组上使用
for...in,它不保证顺序并且迭代所有可枚举的属性,而是使用for...of。 -
不,你不能在循环中声明新函数,而是传递函数。传递对
addEventListener的引用的想法使得对多个事件使用相同的函数成为可能,它节省了一些内存。当您在同一范围内定义array和eventhandler时,array可以在函数中访问,您不需要循环。还要注意沙丁鱼所说的。 -
感谢 teemu 提供的示例!因此,我了解了“事件对象”。
标签: javascript dom closures dom-events