2010-08-31 76 views
6

约DOM一些愚蠢的问题,请不要恨我正确的方式,以防止对DOM事件侦听器的内存泄漏

对于一些原因,我需要通过一个匿名函数对addEventListener(主要以“通”上下​​文变量)但曾经调用的监听器可以被删除,所以我想了解下面显示的代码是否是正确的方式来分离监听器。

var item = document.createElement("div"); 
    item.addEventListener("click", function(event) { 
     // do some stuff 
     // remove listener otherwise we generate a memory leak 
     item.removeEventListener("click", arguments.callee, false); 
    }, false); 

    var menu = document.getElementById("mymenu"); // some element 
    menu.appendChild(item); 

另一个问题,如果使用removeChild从元素菜单中删除元素菜单,监听器会自动删除?

+0

据Mozilla的文档 https://developer.mozilla.org/en/DOM报道似乎有必要/element.addEventListener#Memory_issues 你是对的我正在使用Firefox;) – dafi 2010-08-31 17:59:38

回答

6

我知道你想使用一个匿名函数,但你可能会更好的命名函数;它应该仍然可以访问相同的外部变量。

也许这:

var item = document.createElement("div"); 
var listener = function(event) { 
     // do some stuff 
     // remove listener otherwise we generate a memory leak 
     item.removeEventListener("click", listener, false); 
    }; 
item.addEventListener("click", listener, false); 

var menu = document.getElementById("mymenu"); // some element 
menu.appendChild(item); 

哦,我不恨你:)

+0

明确地说这听起来更简单,谢谢 – dafi 2010-08-31 17:55:13

相关问题