IE9-添加和删除DOM元素会破坏父keydown事件

IE9 - adding and removing DOM element breaks parent keydown event

本文关键字:keydown 事件 元素 添加 删除 DOM IE9-      更新时间:2023-09-26

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

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

看看这把小提琴:http://jsfiddle.net/T2Lt8/13/

您可以看到,仅在两个左右的keydown事件之后,父对象就停止了激发。但是,如果我在keydown处理程序中取消对$(child).focus()行的注释,那么一切都可以。

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

玩了一段时间后,我发现了以下内容:

  1. 如果添加child.style.border = "1px solid red";,则会看到创建了第二个子项,因为第一个子项没有删除。这是由于父级中存在空白。

  2. 孩子比父母大。如果您将父项设置为150px乘以150px,然后只单击父项而不是子项,那么关键事件将正确且重复地工作。看来IE9确实保持了约束力。

  3. 如果孩子是像textarea这样的"不透明"的东西,这似乎会使Firefox的行为与我们在IE9中看到的行为类似。