例如,如果我有如下所示的一系列事件监听器:
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),或者是否会自动删除?这甚至是个问题吗?
答案 0 :(得分:3)
分配给已销毁元素的事件处理程序标记为垃圾回收。意味着它们将从内存中删除。此外,如果您的每个事件都做同样的事情,请将它们绑定到包含<ul>
的点击事件 - 点击事件会从li
冒出来到ul
。
此外,
“除了每个
<li>
元素的事件之外,还有更简单的方法吗?”使用附加到包含ul元素的委托处理程序在这里是有意义的。 不一定更简单,但只是稍微复杂一些 更高效 - 或者如果你动态添加li元素,它可能更简单。 它完全避免了你担心的问题。
(@nnnnnn提供)
将评论转换为答案,因为它似乎有助于回答这个问题。