我应该在删除 DOM 元素后调用 jQuery.off 吗?
Should I call jQuery.off after removing the DOM element?
我正在通过 jQuery.on()
在 DOM 元素上注册一个点击侦听器。如果稍后从 DOM 中删除该元素 - 可能是间接的,例如通过 $(parent).html(...)
替换某些父级的内容,我是否仍然应该费心通过 jQuery.off()
删除我的处理程序?
即使该元素不再触发任何事件,我也担心潜在的内存泄漏。jQuery或浏览器是否会处理这个问题,并在从DOM中删除元素后丢弃所有注册的处理程序?
即使该元素不再触发任何事件,我也担心潜在的内存泄漏。
这是非常好的问题。要回答您的问题,请查看$.fn.html
实现。从那里您将了解到html
将尝试清理存储的事件数据:
// Remove element nodes and prevent memory leaks
if (elem.nodeType === 1) {
jQuery.cleanData(getAll(elem, false));
elem.innerHTML = value;
}
因此,在这种情况下,不需要手动调用.off()
。然而。。
您需要记住,您永远不应该尝试使用本机方法(如 removeChild
或 设置 innerHTML
删除元素,因为在这种情况下肯定会有内存泄漏(如果存储了一些数据,事件由 jQuery 注册等(。在这种情况下,使用 .off
方法实际取消注册事件处理程序会更可靠。或者最好使用事件传播,而不是或html('')
使用$.fn.remove
。
最好在删除节点之前调用jQuery.off,特别是如果它是一个可以包含大量注册事件的单页应用程序。
相关文章:
- jquery on()和off()不起作用
- 关于jquery.off和下拉菜单
- 我可以't对jquery上的click事件使用off函数
- jQuery off() and bind(this)
- 当对未定义的事件使用off()时,jQuery会抛出错误吗
- jQuery On event Off 自动解绑
- jQuery - off method
- 我应该在删除 DOM 元素后调用 jQuery.off 吗?
- jQuery off on 时是用匿名函数定义的
- 使用jQuery.off或.unbind删除和添加滚动事件处理程序
- jQuery off click event from click event's函数's间隔'
- 在event.prventDefault()之后,jQuery.off(unbind)不起作用
- jQuery .off()不移除处理程序
- jQuery off click with same element
- Jquery .off,然后将其恢复为on
- jQuery .off()方法中的函数处理程序
- jQuery off().remove() or .remove().off() performance
- Jquery off() 用于特定元素
- Jquery off()使用该对象在链
- 使用jquery ".off"删除一个事件处理程序