我有一个应用程序,其中我想要一个用户操作 - 检查复选框 - 导致一系列操作,其中包括在复选框似乎被重写的表中。这在我测试过的除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
它似乎有所帮助。需要更多调查。
答案 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报告。