javascript - removeEventListener 没有在 keydown 上删除事件
问题描述
每当我的组件被渲染时,我都会附加一个事件监听器。
mounted() {
window.addEventListener("keydown", e => this.moveIndex(e));
}
即使它在 moveIndex 方法本身内部,也不会删除事件侦听器。这是我尝试删除事件的方法。
moveIndex(e) {
...
case 0:
player.play({
uri: "https://tv-trtturk.live.trt.com.tr/master.m3u8"
});
window.removeEventListener("keydown", e => this.moveIndex(e));
break;
...
}
即使我尝试通过按钮单击事件删除此事件,它也不会被删除。有什么我想念的吗?
解决方案
removeEventListener
要求监听器相同:
EventTarget.removeEventListener() 方法从 EventTarget 中移除之前使用 EventTarget.addEventListener() 注册的事件侦听器。
由于(e => this.moveIndex(e)) !== (e => this.moveIndex(e))
,他们被视为不同的听众。
它应该是
window.addEventListener("keydown", this.moveIndex);
和
window.removeEventListener("keydown", this.moveIndex);
由于moveIndex
接受e
作为参数并且 Vue 将方法绑定到组件实例,this.moveIndex
因此可以安全地用作回调。
推荐阅读
- excel - Spin Button Starting at 2 Instead of 1
- algorithm - 了解合并排序算法
- android - 使用 RXAndroid:从 Assets 文件夹加载大型 JSON 文件并将其解析为带有分页的列表视图
- javascript - 如何用多个文件制作一个formData
- aws-lambda - pycharm aws 工具包中的 Lambda 自定义名称
- katalon-studio - 在 Katalon Studio 中声明 CustomKeywords 的传统方式是什么?
- javascript - 在 React 中实现 HTML5 画布渐变
- mysql - MySQL 使用 IN()
- asp.net-core - 缺少 Method .net 核心启动预期。使用 await next.Invoke()
- batch-file - 批处理文件中的嵌套 for 循环不展开