Javascript:删除匿名事件侦听器

时间:2011-01-06 15:27:06

标签: javascript dom javascript-events

  

可能重复:
  Removing an anonymous event listener

我有以下跨浏览器功能来添加事件监听器:

_SU3.addEventListener = function(elem, eventName, fn) {
if(elem.addEventListener ) {
    elem.addEventListener(eventName, fn, false);
  } else if (elem.attachEvent) {
      elem.attachEvent('on'+eventName, fn);
  } 
};

我正在添加这样的监听器:

_SU3.addEventListener(_show, "click", function(event) { 
                             _SU3.getChildren(_show, uri, element); 
                    });

哪都好。但是我想在调用一次后删除监听器。就像这样:

_SU3.getChildren = function(_show, url, element) {

... blah... 

_SU3.removeEventListener(_show, 'click', ANON_FUNCTION);

};

但是当然监听器功能是匿名的,因此没有要引用的函数名称。

如何删除侦听器?

由于

4 个答案:

答案 0 :(得分:8)

您需要保留对该功能的引用:

var foo = function(event) { _SU3.getChildren(_show, uri, element); };

_SU3.addEventListener(_show, "click",  foo);

...

_SU3.getChildren = function(_show, url, element) {

... blah... 

_SU3.removeEventListener(_show, 'click', foo);

};

确保变量foo位于删除事件侦听器的范围内。

答案 1 :(得分:4)

你做不到。如果要删除它,则必须存储对它的引用。你怎么能把它与其他人区分开来?

答案 2 :(得分:4)

答案 3 :(得分:-1)