单击其中的元素后替换“tbody”值时jQuery IE 9崩溃

时间:2011-07-19 19:55:40

标签: javascript jquery internet-explorer-9

我有一个应用程序,其中我想要一个用户操作 - 检查复选框 - 导致一系列操作,其中包括在复选框似乎被重写的表中。这在我测试过的除IE 9之外的所有浏览器中都能正常工作。

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

但基本上这个想法是

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

即使在IE 9中,这也可以正常工作,除非用户点击表格当前正文中的某些内容触发它。在这种情况下,IE进入某种无限循环。

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

编辑:我将问题缩小了一点 - 这不是因点击而触发的事件序列,而是我们试图替换innerHTML的事实一个tbody(我认为)当它里面的一个元素有焦点时。找到该元素并blur它似乎有所帮助。需要更多调查。

2 个答案:

答案 0 :(得分:0)

可能的解决方法。在单击处理程序中,调用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);
});

答案 1 :(得分:0)

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