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

标签 javascript jquery dom internet-explorer jquery-events

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

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

看这个 fiddle : http://jsfiddle.net/T2Lt8/13/

您可以看到,在大约两次按键事件之后,父级停止触发。但是,如果我取消注释 keydown 处理程序中的 $(child).focus() 行 - 一切都会起作用。

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

最佳答案

在使用示例一段时间后,我发现了以下内容:

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

  2. child 比 parent 大。如果将父级设置为 150 像素 x 150 像素,并且仅单击父级而不是子级,则按键事件将正确且重复地工作。看来 IE9 确实保留了绑定(bind)。

  3. 如果子元素是“不透明”的东西,例如 textarea,那么 Firefox 的行为似乎与我们在 IE9 中看到的行为类似。

关于javascript - IE9 - 添加和删除 DOM 元素会破坏父 keydown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272132/

相关文章:

javascript - 在加载到 html 之前,我如何获取图像大小?

javascript - 使用javascript暂停CSS动画并跳转到动画中的特定位置

javascript - 如何获取除 $(this) 之外的所有类值

javascript - DOM - 同时事件的计时与 setTimeout

javascript - 我想要 XML 元素中的原始区分大小写的 tagName。

javascript - 在 Facebook 上查看 XS Cookie

javascript - <form> 标签中的 data-url 属性是什么意思?

html - 附加带换行符的 html 比附加不带空格的 html 更容易吗?

javascript - 通过本地方法操作 dom

php - 如何避免在选择两个 div 时重复输入