删除元素时,事件侦听器会发生什么?

时间:2013-07-10 13:05:09

标签: javascript javascript-events

例如,如果我有如下所示的一系列事件监听器:

var els = document.getElementyById('myList').getElementsByTagName('li');
for (i=0;i<els.length;i++) {
    els[i].addEventListener(eventType, function(e){ /* do stuff */ }, true);
}

首先,我是否犯了这样的异端?我的意思是,除了每个<li>元素的事件之外,还有更简单的方法吗?

在任何一种情况下,主要问题是:如果<li>被删除/替换,那些事件监听器会发生什么?如果我这样做会发生什么:

document.getElementyById('myList').innerHTML = 'Hello World!';

听众是否保持“暂停”状态,从而减慢了浏览器的速度(假设我很多<li> s),或者是否会自动删除?这甚至是个问题吗?

1 个答案:

答案 0 :(得分:3)

分配给已销毁元素的事件处理程序标记为垃圾回收。意味着它们将从内存中删除。此外,如果您的每个事件都做同样的事情,请将它们绑定到包含<ul>的点击事件 - 点击事件会从li冒出来到ul

此外,

  

“除了每个<li>元素的事件之外,还有更简单的方法吗?”

     

使用附加到包含ul元素的委托处理程序在这里是有意义的。   不一定更简单,但只是稍微复杂一些   更高效 - 或者如果你动态添加li元素,它可能更简单。   它完全避免了你担心的问题。

(@nnnnnn提供)

将评论转换为答案,因为它似乎有助于回答这个问题。