javascript - 无法删除我附加的事件侦听器
问题描述
我在模块中附加了一个事件侦听器,使用
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);
解决方案
只能删除命名函数,不能删除匿名函数,因为即使您创建了一个相同的匿名函数,它也不会是您之前添加的函数的完全相同的实例。您必须单独设置函数,如下所示:
function clickCather(evt){
. . .
}
然后你可以添加和删除它,addEventListener("click", clickCatcher)
因为removeEventListener("click", clickCatcher);
你将引用内存中的同一个函数实例。
addEventListener
并且,请注意,两者removeEventListener
都没有调用您的函数(函数名称末尾没有括号),您只想引用它。
推荐阅读
- powershell - 找不到接受参数 PowerShell 的位置参数
- asp.net-mvc - Azure 应用服务上的受信任根证书
- c - 运行代码后,输出始终为零
- javascript - 什么是仅使用 date-fns 设置日期的时间部分的有效方法?
- javascript - 如何将今天的日期和时间显示为上午 9 点并持续到第二天?
- android - 找不到来自非 activity_main.xml 的视图
- c# - 无论如何都无法让 AWS Lambda 到 PutObject 到 S3 在同一个账户中
- reactjs - NextJS:getInitialProps 中的 Redux thunk 调用
- rust - 如何使用 lapin 获取 AMQP 消息标头值?
- react-native - 尝试使用 expo cli >= 4.8.0 启动项目时找不到模块“@expo/metro-config”