1

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

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

4

2 回答 2

3

使用 jQuery 的.remove()方法

.remove()当您想要删除元素本身以及其中的所有内容时使用。除了元素本身之外,与元素关联的所有绑定事件和 jQuery 数据都将被删除。”

或者删除所有子元素但保留顶级元素的.empty()方法。

于 2012-02-17T03:09:51.257 回答
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();
});

.delegate()如果您使用 jQuery <1.7 ,您无疑可以实现类似的效果。

据我所知,在删除行时,表和/或其行是使用 MVC 或任何其他生成方法生成的,这无关紧要。

于 2012-02-17T04:39:06.633 回答