gpt4 book ai didi

javascript - 当元素被移除时,事件监听器会发生什么?

转载 作者:行者123 更新时间:2023-11-29 16:15:10 32 4
gpt4 key购买 nike

例如,如果我有一系列这样创建的事件监听器:

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> 发生,那些事件监听器会发生什么? s 被移除/替换了吗?如果我这样做会发生什么:

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

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

最佳答案

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

此外,

"is there a faaar simpler way of doing this other than an event for each <li> element?"

Using a delegated handler attached to the containing ul element makes sense here.Not necessarily simpler, but only slightly more complicated andmore efficient - or maybe it is simpler if you are dynamically adding li elements.And it completely avoids the issue you are worried about.

(由@nnnnnn 提供)

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

关于javascript - 当元素被移除时,事件监听器会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571403/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com