首页 > 解决方案 > 无法删除我附加的事件侦听器

问题描述

我在模块中附加了一个事件侦听器,使用

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

标签: javascriptaddeventlistenerremoveeventlistener

解决方案


只能删除命名函数,不能删除匿名函数,因为即使您创建了一个相同的匿名函数,它也不会是您之前添加的函数的完全相同的实例。您必须单独设置函数,如下所示:

function clickCather(evt){
  .  .  .
}

然后你可以添加和删除它,addEventListener("click", clickCatcher)因为removeEventListener("click", clickCatcher);你将引用内存中的同一个函数实例。

addEventListener并且,请注意,两者removeEventListener都没有调用您的函数(函数名称末尾没有括号),您只想引用它。


推荐阅读