Javascript:删除匿名事件侦听器

Ric*_*d H 6 javascript dom javascript-events

可能重复:
删除匿名事件侦听器

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

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

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

_SU3.addEventListener(_show, "click", function(event) { 
                             _SU3.getChildren(_show, uri, element); 
                    });
Run Code Online (Sandbox Code Playgroud)

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

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

... blah... 

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

};
Run Code Online (Sandbox Code Playgroud)

但当然,监听器功能是匿名的,因此没有可供参考的功能名称.

如何删除监听器?

谢谢

Mat*_*att 8

您需要保留对该函数的引用:

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

_SU3.addEventListener(_show, "click",  foo);
Run Code Online (Sandbox Code Playgroud)

...

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

... blah... 

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

};
Run Code Online (Sandbox Code Playgroud)

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