javascript - removeEventListener 不会删除 keydown 上的事件

标签 javascript vue.js

每当我的组件被渲染时,我都会附加一个事件监听器。

 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要求监听器相同:

The EventTarget.removeEventListener() method removes from the EventTarget an event listener previously registered with EventTarget.addEventListener().

(e => this.moveIndex(e)) !== (e => this.moveIndex(e)) 起,它们被视为不同的监听器。

应该是

window.addEventListener("keydown", this.moveIndex);

window.removeEventListener("keydown", this.moveIndex);

由于 moveIndex 接受 e 作为参数,并且 Vue 将方法绑定(bind)到组件实例,因此 this.moveIndex 可以安全地用作回调。

关于javascript - removeEventListener 不会删除 keydown 上的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60638416/

相关文章:

javascript - 使用 JavaScript 中的日期函数转换日期时删除当前时间

javascript - 根据第一个下拉值填充第二个下拉列表

vue.js - Vuetify V-File-输入多个文件

javascript - 当组件是 fragment view 时添加 props 和 transition

javascript - Vuetify 数据表不显示数据

javascript - 使用三种不同的 Accordion 时,ng-repeat selected row css

javascript - 更改每个图像源以加载较小的版本

javascript - 为什么ajax请求提交 'none'作为dom元素的值?

vue.js - 获取 vuetify 列表的选择

jquery - Vue路由改变页面时如何加载Jquery插件/脚本?