所以,如果在
javascript中,我在HTML页面中创建一个DOM对象,并将事件监听器附加到DOM对象,当我从HTML页面中删除DOM时,事件监听器是否仍然存在并导致内存泄漏?
function myTest() {
var obj = document.createElement('div');
obj.addEventListener('click', function() {alert('whatever'); });
var body = document.getElementById('body'); // assume there is a <div id='body'></div> already
body.appendChild(obj);
}
// then after some user actions. I call this:
function emptyPage() {
var body = document.getElementById('body');
body.innerHTML = ''; //empty it.
}
那么,DOM对象< div>里面的身体消失了.但是eventlistener怎么样?
我只是害怕它会导致内存泄漏.
最佳答案 令人遗憾的是,W3C没有事件集合,您可以在其中筛选应用于单个元素的所有事件.您可以手动执行(即obj.Events = {}; obj.Events [type] = []; obj.Events [type] .push(fn)为每个添加的事件.Event [types]是一个数组所以如果您希望一次触发多个函数,则可以单独删除每个函数,然后循环遍历obj.Events对象以在删除对象之前删除所有事件.