无法删除我附加的事件侦听器
can't remove an event listener I attached
我使用
在模块中附加了一个事件侦听器
document.addEventListener('keydown', () => this.clickCatcherFunction(target_id));
但是当那个函数被执行时,行
document.removeEventListener("keydown", () => this.clickCatcherFunction());
不会删除侦听器。下次按下某个键时,它会执行 clickCatcherFunction 并失败。我怎样才能将我用来创建它的相同功能传递给它以删除它?
其他失败的尝试:
document.removeEventListener("keydown", this.clickCatcherFunction());
document.removeEventListener("keydown", clickCatcherFunction());
document.removeEventListener("keydown", clickCatcherFunction);
只能删除命名函数,不能删除匿名函数,因为即使你创建一个相同的匿名函数,它也不会完全相同 instance 您之前添加的功能。您必须单独设置函数,如下所示:
function clickCather(evt){
. . .
}
然后您可以使用 addEventListener("click", clickCatcher)
和 removeEventListener("click", clickCatcher);
添加和删除它,因为您将在内存中引用相同的函数实例。
而且,请注意,对于 addEventListener
和 removeEventListener
,您不会调用您的函数(函数名称末尾没有括号),您只想引用它。
我使用
在模块中附加了一个事件侦听器document.addEventListener('keydown', () => this.clickCatcherFunction(target_id));
但是当那个函数被执行时,行
document.removeEventListener("keydown", () => this.clickCatcherFunction());
不会删除侦听器。下次按下某个键时,它会执行 clickCatcherFunction 并失败。我怎样才能将我用来创建它的相同功能传递给它以删除它?
其他失败的尝试:
document.removeEventListener("keydown", this.clickCatcherFunction());
document.removeEventListener("keydown", clickCatcherFunction());
document.removeEventListener("keydown", clickCatcherFunction);
只能删除命名函数,不能删除匿名函数,因为即使你创建一个相同的匿名函数,它也不会完全相同 instance 您之前添加的功能。您必须单独设置函数,如下所示:
function clickCather(evt){
. . .
}
然后您可以使用 addEventListener("click", clickCatcher)
和 removeEventListener("click", clickCatcher);
添加和删除它,因为您将在内存中引用相同的函数实例。
而且,请注意,对于 addEventListener
和 removeEventListener
,您不会调用您的函数(函数名称末尾没有括号),您只想引用它。