如何删除匿名函数声明的元素的事件?

时间:2011-12-30 14:47:06

标签: javascript javascript-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)

在哪里做,是否可以直接在我发表评论的函数中?

2 个答案:

答案 0 :(得分:7)

如果您使用addEventListener()添加活动,则必须提供该功能,以便随后将其删除。

使用匿名函数,只有在arguments.callee时才能使用,然后只有当你在函数本身内时:

element.addEventListener('click', function() {
    this.style.backgroundColor = '#cc0000';
    this.removeEventListener('click', arguments.callee);
}, false);

但请注意,这在ES5“严格模式”中不合法。

因此,最好给回调一个名称,然后在调用removeEventLister()时使用它:

element.addEventListener('click', function cb() {
    this.style.backgroundColor = '#cc0000';
    this.removeEventListener('click', cb);
}, false);

http://jsfiddle.net/alnitak/RsaVE/

演示

答案 1 :(得分:2)

不再是真正的匿名,但这是我能想到的最好的(使用闭包):

(function(){
  var handler = function(){
    this.style.backgroundColor = '#cc0000'
    element.removeEventListener('click', handler, false);
  };
  element.addEventListener('click', handler, false);
})();

编辑:Alnitak修改后的答案+1 - 它比这个更简洁。