防止jQuery在元素删除时解除绑定事件

时间:2014-04-04 03:17:44

标签: javascript jquery

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的默认删除行为?

1 个答案:

答案 0 :(得分:5)

请勿使用.remove()使用.detach()

button.detach();

演示:Fiddle

.detach()

  

.detach()方法与.remove()相同,但.detach()除外   保持所有jQuery数据与删除的元素相关联。这个   当要删除的元素要重新插入时,方法很有用   以后的DOM。

.remove()

  

与.empty()类似,.remove()方法将元素取出   DOM。如果要删除元素本身,请使用.remove()   作为里面的一切。所有元素本身除了元素本身   绑定事件和与元素关联的jQuery数据将被删除。   要删除元素而不删除数据和事件,请使用.detach()   代替。