从事件监听器中调用removeEventListener?

时间:2014-11-20 05:46:29

标签: javascript

我有一些简单的代码,但目前它不会在第一次调用后删除侦听器。我怎样才能做到这一点?或者我是否真的需要在通知时添加对var set的冗余if / else检查?

    document.addEventListener("contextmenu", function(e){
        alert("Please remember this is someone's art! Give credit where it is deserved!");
        document.removeEventListener("contextmenu", function(e){
            console.log('User has been warned...');
        });
    }, false);

更新代码每次点击都会显示相同的消息

    document.addEventListener("contextmenu", function msg(e){
        alert("Please remember this is someone's art! Give credit where it is deserved!");
        e.removeEventListener("contextmenu", msg, false);
    }, false);

3 个答案:

答案 0 :(得分:3)

你需要传递相同的功能才能删除为添加。

这样做的简单方法是给函数命名并将名称传递给removeEventListener():

 document.addEventListener("contextmenu", function me(e){
        alert("Please remember this is someone's art! Give credit where it is deserved!");
        document.removeEventListener("contextmenu", me, false);
    }, false);

请参阅https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.removeEventListener以获得良好的概述

强制性小提琴:http://jsfiddle.net/w1kzLkoL/

在chrome,firefox和IE10中测试

答案 1 :(得分:1)

您可以尝试这个例子:



document.addEventListener("contextmenu", (function() {
  var done = false;
  return function(e) {
    if (!done) {
      done = true;
      alert('Warning !');
    }
    console.log('done ...', done);
    e.preventDefault();
    return false;
  };
})(), false);

Open console... right click




答案 2 :(得分:0)

最简单的方法是使用 { once: true } 配置事件侦听器。

document.addEventListener('contextmenu', (e) => {
  your code...
}, { once: true });