这个jQuery 1.3.2代码为页面添加了一个元素,注册了一个“click”事件,然后删除并重新附加了该元素:
var button = $('<button>Click me!</button>')
.click(function(){ alert("Hello") })
.appendTo('body');
$('body').html('');
button.appendTo('body');
按钮按预期显示在页面上,但点击它不会执行任何操作。我想知道为什么从对象中删除了事件处理程序。
注意:我了解jQuery.live()
或clone(true)
等解决方案或使用appendTo
而无需删除的解决方案。我正在寻找的是解释,而不是解决方案或解决方法。
答案 0 :(得分:6)
使用jQuery从DOM中删除元素时,jQuery在该元素上保存的所有数据(包括事件处理程序)都将被销毁。这样做是为了避免内存泄漏。
这不是DOM API的功能(或错误)。这只是jQuery。
答案 1 :(得分:5)
如果您希望您的注册事件留在您的元素上,请使用.detach()而不是.remove()。使用它与使用.remove()的方式相同,它会将事件保留在元素上。