删除的EventListener仍然会触发

时间:2013-09-06 09:07:41

标签: javascript

我有这样的事件:

var CountDemKeys;
document.body.addEventListener('keypress', function() { 
  CountDemKeys++;
  if (CountDemKeys % 10 === 0) {
    alert("WOO HOO!");
  }
});

并在一个单独的函数中:

RemoveShizzle = function() {
  document.body.removeEventListener('keypress');
};

但事件仍在发生:(

注意:我还尝试将活动设置为nulldocument.body.addEventListener('keypress', null);

document.body.addEventListener('keypress', null);
没有快乐......

2 个答案:

答案 0 :(得分:5)

你必须将与第二个参数相同的函数传递给removeEventListener

可能有其他侦听器附加到'keypress'到body元素。

因此,在没有提供原始函数的情况下,removeEventListener不知道要删除哪个侦听器。

var CountDemKeys;
var listener = function() { 
  CountDemKeys++;
  if (CountDemKeys % 10 === 0) {
    alert("WOO HOO!");
  }
};
document.body.addEventListener('keypress', listener);

RemoveShizzle = function() {
  document.body.removeEventListener('keypress', listener);
};

答案 1 :(得分:0)

你很可能错过removeEventListener的第二个参数。

另请注意,对于MSIE支持,您需要使用attachEvent