防止 jQuery 在元素删除时取消绑定事件
Prevent jQuery from unbinding events on element removal
TL/DR:有没有办法防止jQuery在从DOM中删除元素时自动取消绑定事件?
当您在 jQuery 元素上调用 remove()
时,jQuery 会自动取消绑定该元素的所有事件。例如,假设我有以下内容:
var button = $("<button>Click me</button>");
$("body").append(button);
button.click(function() {
console.log("clicked");
});
button.remove();
$("body").append(button);
如果我单击该按钮,则不会将任何内容输出到控制台。解决此问题的一种方法是将事件绑定到元素的父元素,如下所示:
$("body").on("click", "button", function() {
console.log("clicked");
});
我正在尝试构建一个可重用的控件,该控件包装 jQuery 元素并向其添加新行为。将事件绑定到父元素的解决方案对我不起作用,因为我无法确定该元素在 DOM 中的附加位置以及是否会将其删除。出于性能原因,我不想将事件绑定到文档(可能有很多)。有没有办法防止jQuery的默认删除行为?
不要使用.remove()
使用.detach()
button.detach();
演示:小提琴
.detach()
.detach() 方法与 .remove() 相同,只是 .detach() 保留与已删除元素关联的所有 jQuery 数据。这 方法在将删除的元素重新插入到 DOM 在以后的时间。
.remove()
与 .empty() 类似,.remove() 方法将元素从 当你想删除元素本身时,也使用 .remove() 就像里面的一切一样。除了元素本身,所有 绑定事件和与元素关联的 jQuery 数据将被删除。 要在不删除数据和事件的情况下删除元素,请使用 .detach() 相反。
相关文章:
- 如何销毁/删除/取消绑定SnapSVG.js
- 取消绑定主干视图事件
- 从父元素取消绑定滚动事件并绑定到子元素
- 使用Re-base时,在React中从状态绑定和取消绑定Firebase
- javascript onchange取消绑定错误|未定义
- 在javascript中取消绑定侦听器
- 在偶数侦听器块中绑定和取消绑定
- 取消绑定angular中的scope属性
- 根据文件类型取消绑定和重新绑定click事件处理程序
- 取消绑定而不是重新绑定
- 取消绑定/绑定单击jquery selectbox插件
- 取消绑定后未提交的表单
- 动态取消绑定eventListeners(垃圾收集)
- 取消绑定父节点和子节点
- 取消绑定由加载jQuery'的外部脚本添加的事件;s的getScript函数
- 正在取消绑定jQuery事件处理程序
- 取消绑定除特定命名空间之外的所有命名空间中的事件
- 删除和取消绑定主干中的子视图
- 取消绑定窗口.onbeforeunload()取消
- setTimeout vs. 事件绑定/取消绑定;什么更有效