Javascript 如何删除作为匿名函数传入的事件侦听器?

Javascript 如何删除作为匿名函数传入的事件侦听器?,javascript,events,Javascript,Events,在向对象添加事件侦听器时,我必须向函数传递一个参数,因此,必须像soel.addEventListener(“单击”,(evt)=>{someFunc(arg)})那样包装它。但是,我无法在以后的项目中删除此事件侦听器。当引用的函数是匿名函数时,如何删除事件侦听器?使用。此要求您保留对函数的引用 var func = (evt) => { someFunc(arg) }; el.addEventListener("click", func); el.removeEventListener(

在向对象添加事件侦听器时,我必须向函数传递一个参数,因此,必须像so
el.addEventListener(“单击”,(evt)=>{someFunc(arg)})
那样包装它。但是,我无法在以后的项目中删除此事件侦听器。当引用的函数是匿名函数时,如何删除事件侦听器?

使用。此要求您保留对函数的引用

var func = (evt) => { someFunc(arg) };
el.addEventListener("click", func);
el.removeEventListener("click", func)

您可以使用创建一个
addOneTimeEventListener
函数,以便以后在整个项目中对多种类型的事件使用该函数:

function addOneTimeEventListener(node, type, callback) {
    node.addEventListener(type, function(evt) {
        evt.target.removeEventListener(evt.type, arguments.callee);
        return callback(evt);
    });
}
然后使用它:

addOneTimeEventListener(el, 'click', evt => someFunc(arg));
工作演示:

var addOneTimeEventListener=函数(节点、类型、回调){
node.addEventListener(类型、功能(evt){
evt.target.removeEventListener(evt.type,arguments.callee);
返回回调(evt);
});
},
el=document.getElementById('段落');
addOneTimeEventListener(el,'click',evt=>console.log('Clicked once!'))

一些文本示例…

每当我尝试调用函数时,都会出现一个错误,
el.addOneTimeEventListener不是函数。我似乎正在实现一个相同的功能,有什么想法吗?我已经编辑了解决方案并添加了一个工作演示。。希望能有帮助