如果我将一个JavaScript事件绑定到一个元素,然后删除该元素,事件会发生什么

If I bind a JavaScript event to an element, then delete the element, what happens to the event?

本文关键字:一个 事件 元素 什么 删除 绑定 JavaScript 如果 然后      更新时间:2023-09-26

假设我有一个元素:

<section id="container">
    <div id="curious">hey, there</div>
</section>

然后,在加载DOM之后,我将一个事件绑定到元素,如下所示:

$('#curious').click(function (){
  alert('Are you curious?');
});

稍后,元素被删除:

$('#container').html('');

绑定事件发生了什么?它也被删除了吗?它在附近徘徊吗?清理它是个好做法吗?

根据.html()方法的jQuery文档,删除了事件处理程序。

这样做是为了防止内存泄漏。

.html()用于设置元素的内容时,该元素中的任何内容都将被新内容完全替换。此外,jQuery在用新内容替换子元素之前,从子元素中删除其他构造,如数据和事件处理程序

同样,当使用.empty()/.remove()方法时也是如此:

所有绑定的事件和与元素相关联的jQuery数据都将被删除。

如果要保留数据和事件侦听器,请改用.detach()方法。.detach()方法本质上与.remove()方法相同,只是它保留了与已删除元素相关联的所有jQuery数据(这意味着您可以在分离同一元素后附加该元素,并且事件仍将被绑定)。