为什么我不能在Javascript中清除事件监听器?

时间:2018-06-13 00:49:35

标签: javascript dom dom-events

超时时,我可以做类似

的事情
let x = setTimeout(func, 0);
clearTimeout(x);

有没有办法做类似

的事情
let x = document.addEventListener("click", func);
clearEventListener(x);

我似乎无法找到一种直截了当的方式来做这件事而且经常出现。

1 个答案:

答案 0 :(得分:2)

下面是向元素添加事件侦听器然后在第一次处理事件时将其删除的示例代码。您可以通过再次单击该按钮并观察未执行处理函数来确认已删除事件侦听器。

var eventHandler = function(e) {
  console.log('Handled the event once - now I\'m going to remove the eventListner via removeEventListener.');
  //remove the event handler
  e.target.removeEventListener('click', eventHandler);
}

//add an event handler
document.getElementById('btn').addEventListener('click', eventHandler);
<input id="btn" type="button" value="Example">

以下是这些方法的mdn文档:

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener