jQuery IE 9在替换"tbody"时崩溃;值,单击其中的元素后

jQuery IE 9 crash when replacing "tbody" value after clicking on an element inside it

本文关键字:quot 单击 元素 IE 替换 jQuery tbody 崩溃      更新时间:2023-09-26

我有一个应用程序,我希望在其中的一个用户操作-选中一个复选框-引起一系列操作,除其他外,在表中,复选框似乎被重写了。这在我测试过的所有浏览器中都可以正常工作,除了ie9。

我在这个jsfiddle中复制了这个行为:http://jsfiddle.net/vM7Bu/3/

但本质上是

$('tbody#mytablebody').empty();
for (var i in something) {
  $('tbody#mytablebody').append(makeNewRow(i));
}

即使在ie9中,这也可以正常工作,除非它是由用户单击表当前主体内的某些内容触发的。在这种情况下,IE会进入某种无限循环。

这是IE 9中已知的问题吗?可能有哪些变通方法?

EDIT:我把问题缩小了一点-它不是那么多的事件序列触发的点击,而是我们试图取代tbodyinnerHTML(我认为)的事实,当它里面的元素有焦点。找到这种元素并对其进行blur处理似乎有所帮助。

可能的解决方法。在点击处理程序中,调用setTimeout(xxx, 0);并从setTimeout函数执行您的工作。如果IE崩溃是因为你正在删除表格的一部分,你在一个点击处理程序的中间,那么setTimeout会让你从点击处理程序中移除表格的那一部分。

伪代码:

$("#whatever").click(function() {
    setTimeout(function() {
        $('tbody#mytablebody').empty();
        for (var i in something) {
            $('tbody#mytablebody').append(makeNewRow(i));
        }
    }, 0);
});

据我所知,虽然我仍然没有设法在不使用jQuery的情况下复制它,但问题是,在IE 9中,如果这些元素仍然具有键盘焦点,则无法从DOM中删除某些类型的元素。这似乎是规则。如果我能在独立代码中重现它,我会向MS报告。