使用以下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事件将被发送到元素.这与焦点事件的不同之处在于它支持在父元素上检测焦点事件(换句话说,它支持事件冒泡).
对我来说为时已晚还是与另一方相矛盾?