Javascript 如何删除由匿名函数声明的元素的事件?
示例代码:Javascript 如何删除由匿名函数声明的元素的事件?,javascript,dom-events,anonymous-function,Javascript,Dom Events,Anonymous Function,示例代码: element.addEventListener('click',function () { this.style.backgroundColor = '#cc0000' //after element was clicked once what to do here to remove this event ? },false) 在何处执行此操作,是否可以直接在我放置注释的函数中执行此操作?如果使用addEventListener()添加事件,则必须具有对该函数的引用才能
element.addEventListener('click',function () {
this.style.backgroundColor = '#cc0000'
//after element was clicked once what to do here to remove this event ?
},false)
在何处执行此操作,是否可以直接在我放置注释的函数中执行此操作?如果使用
addEventListener()
添加事件,则必须具有对该函数的引用才能随后删除它
匿名函数只能使用参数。被调用方
,并且只能在函数本身中使用时:
element.addEventListener('click', function() {
this.style.backgroundColor = '#cc0000';
this.removeEventListener('click', arguments.callee);
}, false);
但请注意,这在ES5“严格模式”中是不合法的
因此,最好为回调函数指定一个名称,然后在调用removeventlister()
时使用该名称:
在上的演示不再是真正的匿名,但这里是我能想到的最好的(使用闭包):
编辑:+1用于Alnitak修改后的答案-比这个答案更简洁。但我想知道他们是否真的会删除
参数。浏览器中的被调用方功能可能会被弃用几十年,效果很好。@rsk82如果代码声明使用严格,它已经被删除代码>获取事件侦听器列表的相关问题:
element.addEventListener('click', function cb() {
this.style.backgroundColor = '#cc0000';
this.removeEventListener('click', cb);
}, false);
(function(){
var handler = function(){
this.style.backgroundColor = '#cc0000'
element.removeEventListener('click', handler, false);
};
element.addEventListener('click', handler, false);
})();