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