在删除我的委托处理程序所附加的元素时,我在IE8上遇到了使用jQuery的.delegate()方法的问题。这是场景:我有一个包含行的表,每个行都有一个删除按钮。行是动态创建的,因此使用委托来连接删除按钮以处理单击事件。当删除最后一行时,整个表被删除(只有在创建至少一行的值时才创建表。)除了IE8之外,这种方法几乎无处不在。即使这样,它也可以在某些页面上工作,但不是一个页面(每页都使用完全相同的代码。)对于这一个特定页面,删除最后一行会在IE8中生成一个js错误,说明“需要对象” - 违规在委托的jQuery代码中的行。
所以问题是,当处理程序使用的某些DOM元素被删除时,处理程序的最佳实践是什么?是否应该在某个时候调用undelegate,如果是,那么?
答案 0 :(得分:3)
使用jQuery的.remove()
method:
“当你想删除元素本身及其中的所有内容时,请使用
.remove()
。除了元素本身之外,还删除了与元素相关的所有绑定事件和jQuery数据。”
或.empty()
method删除所有子项,但保留顶级元素。
答案 1 :(得分:0)
Kinakuta,根据您的说法,可能只是正确设置授权并适当地删除删除的问题,而不是remove()
本身的使用与否。很难理解为什么只有IE8应该行为不端,但可能是jQuery中的一些IE8问题。
使用jQuery 1.7 + .on()
取代.bind()
,.live()
和.delegate()
,可能会提供前进的方法。我希望做这样的事情:
$("#myContainer").on("click", "button.delete", function(event){
$(this).closest("tr", "#myContainer").remove();
});
如果使用jQuery< 1.7,毫无疑问,与.delegate()
类似。
据我所知,在行删除时,使用MVC或任何其他生成方法生成表和/或行是无关紧要的。