【发布时间】:2016-12-20 19:05:09
【问题描述】:
在向对象添加事件侦听器时,我必须将参数传递给我的函数,因此,必须像 el.addEventListener("click", (evt) => { someFunc(arg) }) 那样包装它。但是,我无法稍后在我的项目中删除此事件侦听器。当被引用的函数是匿名函数时,如何移除事件监听器?
【问题讨论】:
标签: javascript events
在向对象添加事件侦听器时,我必须将参数传递给我的函数,因此,必须像 el.addEventListener("click", (evt) => { someFunc(arg) }) 那样包装它。但是,我无法稍后在我的项目中删除此事件侦听器。当被引用的函数是匿名函数时,如何移除事件监听器?
【问题讨论】:
标签: javascript events
使用removeEventListener。这要求您保留对您的函数的引用。
var func = (evt) => { someFunc(arg) };
el.addEventListener("click", func);
el.removeEventListener("click", func)
【讨论】:
您可以使用removeEventListener 创建一个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 = function(node, type, callback) {
node.addEventListener(type, function(evt) {
evt.target.removeEventListener(evt.type, arguments.callee);
return callback(evt);
});
},
el = document.getElementById('paragraph');
addOneTimeEventListener(el, 'click', evt => console.log('Clicked once!'));
<p id="paragraph">Some text example...</p>
【讨论】:
el.addOneTimeEventListener is not a function 的错误消息。我似乎正在实现一个相同的功能,任何想法可能是什么问题?