簡體   English   中英

刪除元素后,事件偵聽器會如何處理?

[英]What happens to event listeners when element is removed?

例如,如果我有一系列這樣創建的事件偵聽器:

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> ),還是被自動刪除了? 甚至有問題嗎?

分配給已破壞元素的事件處理程序將標記為垃圾回收。 意味着它們已從內存中刪除。 同樣,如果您的每個事件都執行相同的操作,請將其綁定到包含在內的<ul>事件將從li s ulul

也,

“除了每個<li>元素的事件以外,還有其他簡便的方法可以做到這一點嗎?”

在這里,使用附加到包含ul元素的委托處理程序是有意義的。 不一定會更簡單,但只會稍微更復雜和更有效-也許如果動態添加li元素會更簡單。 它完全避免了您擔心的問題。

(由@nnnnnn提供)

將評論轉換為答案,因為它似乎有助於回答問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM