【发布时间】:2013-06-05 11:17:24
【问题描述】:
对于http://jsfiddle.net/mgs_jsfiddle/HXMCs/,如果鼠标移到子区域,为什么不运行第一个事件处理程序?
<div class="top">
<div class="sub"></div>
</div>
$(".top").bind("mouseover mouseout", function(e) {
});
$(".top").on("mouseover mouseout", ".sub", function(e) {
e.stopPropagation();
});
两个处理程序都附加到顶部元素。 stopPropagation 的文档告诉我“这不会阻止同一元素上的其他处理程序运行”。那么不应该调用第一个处理程序吗?
【问题讨论】:
-
你为什么要混合 bind 和 on?当你没有按照你应该的方式使用它们时,你不能指望事情会按照他们声称的方式工作。您正在侦听不同元素上的事件,而您恰好将侦听器附加在同一位置。
-
混合?因为它在真实代码中是有意义的。在顶部下方的深层层次中有许多子。并且 top 还必须监听事件,因为 top 没有完全被 subs 覆盖。
-
虽然您将事件委托给
.top,但它会监听.sub上的事件。 jQuery 足够聪明,可以像处理一次正常的委托事件一样处理委托事件。 -
阅读文档后我不会这么认为。它说“委托事件方法仅将事件处理程序附加到一个元素”。此外,如果 jQuery 监听了 subs,它怎么知道后来创建的 subs?
标签: jquery events stoppropagation