这基本上是对此的后续问题:Can't pass event to addEventListener: closure issue。
我几乎阅读了所有相关问题,但找不到答案。
以下函数在循环中执行,其中参数从数据数组中提取。 使用此函数,我可以将不同/新参数传递给事件侦听器的每个实例。 outer函数允许将参数的值封装在闭包中,以便实际值可用,而不仅仅是对持有者的引用。此外,passevent功能将事件传递给响应函数。最后,响应函数具有所有适当的信息以响应click事件。这非常有效。 问题是,我无法弄清楚如何在以后删除事件监听器。我已经尝试了所有我能想到的东西。请帮忙。我该怎么做:removeEventListener?
(function outerfunction(i, f) {
elementname.addEventListener("click", function passeventfunction(e) {
responsefunction(e, f, i); });})(parameter1, parameter2);
另外,如果有人可以帮助澄清这里发生的事情。这是封闭内的闭包吗?是否有留下内存泄漏的危险?谢谢!
答案 0 :(得分:11)
您必须保留对听众的引用:
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]);