使用处理程序删除元素时的最佳做法是什么?

时间:2012-02-17 03:07:03

标签: jquery event-delegation

在删除我的委托处理程序所附加的元素时,我在IE8上遇到了使用jQuery的.delegate()方法的问题。这是场景:我有一个包含行的表,每个行都有一个删除按钮。行是动态创建的,因此使用委托来连接删除按钮以处理单击事件。当删除最后一行时,整个表被删除(只有在创建至少一行的值时才创建表。)除了IE8之外,这种方法几乎无处不在。即使这样,它也可以在某些页面上工作,但不是一个页面(每页都使用完全相同的代码。)对于这一个特定页面,删除最后一行会在IE8中生成一个js错误,说明“需要对象” - 违规在委托的jQuery代码中的行。

所以问题是,当处理程序使用的某些DOM元素被删除时,处理程序的最佳实践是什么?是否应该在某个时候调用undelegate,如果是,那么?

2 个答案:

答案 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或任何其他生成方法生成表和/或行是无关紧要的。