ber*_*nie 12 javascript jquery event-handling
使用以下html结构:
<div>
<form><span><input></span></form>
</div>
<p>
Run Code Online (Sandbox Code Playgroud)
和以下jquery代码:
$('form').on("focus", function(event) {
$("p").append("focus no delegation<br>");
})
Run Code Online (Sandbox Code Playgroud)
为什么焦点事件没有到达我的事件处理程序?使用选择器参数绑定事件可以正常工作:
$('form').on("focus", "input", function(event) {
$("p").append("focus delegation<br>");
})
Run Code Online (Sandbox Code Playgroud)
活动下一个片段的作用,所以焦点事件实际上泡沫......
$('form').on("focus", "span", function(event) {
$("p").append("focus delegation<br>");
})
Run Code Online (Sandbox Code Playgroud)
两种形式都适用于点击和更改事件:
$('form').on("click", function(event) {
$("p").append("click no delegation<br>");
})
$('form').on("click", "input", function(event) {
$("p").append("click delegation<br>");
})
Run Code Online (Sandbox Code Playgroud)
我发现关于焦点事件冒泡的唯一注意事项是相对于我不使用的旧jQuery版本.在这里看到它
这很令人困惑......根据jQuery的焦点文档:
焦点事件不会在Internet Explorer中冒泡.因此,依赖于焦点事件的事件委派的脚本将无法跨浏览器一致地工作.但是,从版本1.4.2开始,jQuery通过将焦点映射到其事件委托方法.live()和.delegate()中的focusin事件来解决此限制.
根据jQuery的焦点文档:
当focusin或其中的任何元素获得焦点时,focusin事件将被发送到元素.这与焦点事件的不同之处在于它支持在父元素上检测焦点事件(换句话说,它支持事件冒泡).
对我来说为时已晚还是与另一方相矛盾?
是的,jQuery 文档似乎具有误导性。我相信文档focus忽略了提及这是针对不涉及用户输入的元素(@Ohgodwhy 在您的问题评论中在上面列出了它们)。
我想这与浏览器需要将光标捕获在具有 的输入元素中有关focus,以便它可以接受来自键盘的输入。换句话说,如果 jQuery 允许它冒泡,那么您将永远没有机会在输入字段中键入内容。
focus无论哪种方式,除非您首先在其上放置一个表单,否则您永远不会获得接受事件的表单tabindex:http://jsfiddle.net/qxLqP/,但如果基于输入的字段首先获得焦点,则它永远不会冒泡。默认情况下,该form元素没有tabindex,并且您无法将焦点设置到没有 的元素tabindex。
我只是接受@Ohgodwhy 的使用解决方案focusin,然后让 jQuery 团队了解他们令人困惑的文档。
| 归档时间: |
|
| 查看次数: |
8476 次 |
| 最近记录: |