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

时间:2012-09-04 22:21:22

标签: javascript jquery internet-explorer dom javascript-events

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

在玩了一段时间之后,我找到了以下内容:

  1. 如果添加child.style.border = "1px solid red";,您会看到第二个子项已创建,因为第一个子项未被删除。这是因为有whitespace in the parent

  2. 孩子比父母大。如果您将父级150px设置为150px并且只需单击父级而不是子级,则键事件可以正常且重复地工作。似乎IE9确实保留了绑定。

  3. 如果孩子像textarea一样“不透明”,似乎会使Firefox的行为与我们在IE9中看到的行为相似。