简体   繁体   English

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

[英]Why can't I clear an event listener in Javascript?

With timeouts, I can do something like 有了超时,我可以做类似的事情

let x = setTimeout(func, 0);
clearTimeout(x);

Is there a way to do something like 有没有办法做类似的事情

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

I can't seem to ever find a straightforward way of doing this and it comes up quite often. 我似乎找不到一个简单的方法来做到这一点,而且它经常出现。

Below is example code that adds an event listener to an element and then removes it the first time the event is handled. 下面的示例代码将事件侦听器添加到元素,然后在第一次处理事件时将其删除。 You can confirm that the event listener is removed by clicking the button a second time and observing that the handler function isn't executed. 您可以通过再次单击该按钮并观察未执行处理程序函数来确认已删除事件侦听器。

 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"> 

Here is the mdn documentation for those methods: 这是这些方法的mdn文档:

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM