10

这基本上是一个后续问题:Can't pass event to addEventListener:closure issue

我已经阅读了几乎所有相关的问题,但找不到答案。

下面的函数在从数据数组中提取参数的循环中执行。使用此函数,我可以将不同/新参数传递给事件侦听器的每个实例。外部函数允许将参数的值封装在闭包中,以便实际值可用,而不仅仅是对持有者的引用。此外,passevent 函数将事件传递给 response 函数。最后,响应函数具有所有适当的信息以响应点击事件。这很好用。问题是,我不知道以后如何删除事件侦听器。我已经尝试了我能想到的一切。请帮忙。我该如何: removeEventListener ?

(function outerfunction(i, f) {
     elementname.addEventListener("click", function passeventfunction(e) { 
         responsefunction(e, f, i); });})(parameter1, parameter2);

另外,如果有人可以帮助清除这里发生的事情。这是闭包中的闭包吗?是否存在留下内存泄漏之类的危险?

4

1 回答 1

12

您必须保留对听众的引用:

var listeners = {};
for(/* ... */) {
   (function outerfunction(i, f) {
        var listener = function(e) { 
            responsefunction(e, f, i); 
        }
        elementname.addEventListener("click", listener);
        listeners[elementname.id] = listener; // use something meaningful 
                                              // as your keys
   })(parameter1, parameter2);
}

// Removing the listener later:
elementname.removeEventListener("click", listeners[elementname.id]);
于 2013-11-04T18:15:10.853 回答