我当然可以将.inner
图层从图层中取出,.main
然后对另一个包装器(即.outer
图层)使用绝对位置将其放置在同一位置,这将阻止它触发.main
点击事件。但我想知道如果子元素和父元素都触发点击事件,是否有更简单的方法可以避免同时触发点击事件。
问问题
241 次
2 回答
1
您可以使用stopPropagation()
$(document).ready(function() {
$('.outer').on("click",".main",function() { alert('main clicked'); })
$('.outer').on("click",".inner",function(e) {e.stopPropagation(); alert('inner clicked'); })
});
于 2012-06-02T01:04:15.957 回答
1
使用stopPropagation()
. 即使两者都是委托事件,jQuery 也会首先对它们进行最深的评估。由于最内层有stopPropagation()
,因此不执行顺序较高的事件。
$('.outer').on("click", ".inner", function(event) {
event.stopPropagation();
alert('inner clicked');
});
但是您必须注意直接处理程序和委托处理程序之间的执行顺序。由于事件需要冒泡才能到达委托的处理程序,因此首先触发直接处理程序。当直接处理程序混合使用时,使用委托处理程序停止传播将毫无用处。
于 2012-06-02T01:04:22.413 回答