当多个事件处理程序绑定到一个元素时,如何确定首先触发哪一个?
<script>
$(function(){
$(".li").find('input').click(function(){alert('li>input');});
$(".li").click(function(){alert('li');});
$('input').click(function(){alert('input');});
});
</script>
</head>
<body>
<ul>
<li class="li"><input type="checkbox" /><span>Hello</span></li>
<li class="li"><input type="checkbox" /><span>Hello</span></li>
<li class="li"><input type="checkbox" /><span>Hello</span></li>
</ul>
</body>
Run Code Online (Sandbox Code Playgroud)
Dav*_*Lin 71
我想指出"先到先得"规则并不总是正确的,它还取决于你如何注册一个处理程序:
Handler1 - $(document).on('click', 'a', function....)
Handler2 - $('a').on('click', function....)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,处理程序2始终在handler1之前调用.
看看这个小提琴:http://jsfiddle.net/MFec6/
jfr*_*d00 36
如果两个事件处理程序绑定到完全相同的对象,则它将是先到先服务.附加的第一个将首先执行.
但是,你的例子看起来有点不同.看起来您还有一个事件绑定到input对象,其他事件绑定到父li对象.在这种情况下,事件实际起源的那个(可能是input这种情况下的元素)将首先发生,然后事件将冒泡到父对象,它们将在以后发生.
如果你想停止冒泡到父母,你可以使用jQuery event.stopPropagation(),事件不会到达父母,也不会触发他们的事件处理程序.这看起来像这样:
$('input').click(function(e) {
e.stopPropagation();
alert('input');
});
Run Code Online (Sandbox Code Playgroud)
根据jQuery文档stopPropagation(),它不会停止同一对象上的其他事件处理程序,只会阻止父对象上的事件处理程序通常通过冒泡父树来获取事件.
你可以在这里看到不同之处:http://jsfiddle.net/jfriend00/L33aq/
| 归档时间: |
|
| 查看次数: |
55945 次 |
| 最近记录: |