Javascript IE9-添加和删除DOM元素会破坏父键关闭事件

Javascript IE9-添加和删除DOM元素会破坏父键关闭事件,javascript,jquery,internet-explorer,dom,javascript-events,Javascript,Jquery,Internet Explorer,Dom,Javascript Events,我们正在构建一个相当复杂的UI控件(实际上是一个datagrid),并在用户滚动网格时动态地从DOM树中添加/删除节点(并尝试以尽可能高的性能来完成) 我们在IE9和IE10中注意到,当我们从节点添加/删除子元素时,它停止触发其keydown事件: 看这把小提琴: 您可以看到,在两个左右的keydown事件之后,父级停止触发。但是,如果我取消注释keydown处理程序中的$(child).focus()行,则一切正常 发生了什么,这是解决这个问题的最佳方法吗?在玩了一段时间这个示例后,我发现了

我们正在构建一个相当复杂的UI控件(实际上是一个datagrid),并在用户滚动网格时动态地从DOM树中添加/删除节点(并尝试以尽可能高的性能来完成)

我们在IE9和IE10中注意到,当我们从节点添加/删除子元素时,它停止触发其keydown事件:

看这把小提琴:

您可以看到,在两个左右的keydown事件之后,父级停止触发。但是,如果我取消注释keydown处理程序中的
$(child).focus()
行,则一切正常


发生了什么,这是解决这个问题的最佳方法吗?

在玩了一段时间这个示例后,我发现了以下几点:

  • 如果添加
    child.style.border=“1px实心红色”您会看到第二个子项被创建,因为第一个子项没有被删除。这是由于存在的

  • 孩子比父母大。如果将父项设置为150px乘以150px,只需单击父项而不是子项,则关键事件将正确且重复地工作。看起来IE9确实保持了绑定

  • 如果孩子是某种“不透明”的东西,比如
    textarea
    ,那么Firefox的行为就好像我们在IE9中看到的那样