js事件移除
1.AbortController()
addEventListener()时,可以配置一个信号,用于命令式地中止/删除监听器。当相应的控制器调用 .abort() 时,监听器会被移除:
const button = document.getElementById('button'); const controller = new AbortController(); const { signal } = controller; button.addEventListener('click', () => console.log('clicked!'), { signal }); // Remove the listener! controller.abort();
使用一个信号一次性删除多个监听器,使用匿名函数也可以:
const button = document.getElementById('button'); const controller = new AbortController(); const { signal } = controller; button.addEventListener('click', () => console.log('clicked!'), { signal }); window.addEventListener('resize', () => console.log('resized!'), { signal }); document.addEventListener('keyup', () => console.log('pressed!'), { signal }); // Remove all listeners at once: controller.abort();
如果回调函数分配给变量,并且在添加监听器的地方容易访问,请使用
3. addEventListener() 中使用 once 选项
如果只需要触发一次回调的情况
4.克隆替换方法
需要在一次操作中无差别地删除所有的监听器,请使用克隆替换方法