从事件侦听器中调用 removeEventListener?

WAS*_*tch 1 javascript

我有一些简单的代码,但目前它不会在第一次调用后删除侦听器。我怎样才能做到这一点?或者我是否真的需要在通知后对 var 集添加冗余 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);
Run Code Online (Sandbox Code Playgroud)

更新代码每次右键单击仍然相同的消息

    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);
Run Code Online (Sandbox Code Playgroud)

dan*_*vis 5

您需要通过与添加相同的函数来删除。

做到这一点的简单方法是给函数一个名称并将名称传递给 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);
Run Code Online (Sandbox Code Playgroud)

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

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

在 chrome、firefox 和 IE10 中测试