假设我有标签,并且我附加了两个点击事件:
$('#l1').bind('click',function(){
alert('label clicked');
}
$('#l2').bind('click',function(){
alert('label2 clicked');
}
$('#l3').bind('click',function(){
alert('label3 clicked');
}
$('label').bind('click',function(){
if($(this).hasClass('disabled')
return false
}
<label id='l1'>hi</label>
<label id='l2' class="disabled">bye</label>
<label id='l3'>hi</label>
现在,我不希望在单击具有类disabled
的标签时显示警报。
有可能吗?
注意:alert
只是一个虚拟的东西..我正在执行一系列操作而不是那些...每个根据实际标签的不同
答案 0 :(得分:22)
如果多个事件处理程序绑定到同一事件的同一元素,则处理程序将按绑定的顺序调用。如果在特定处理程序中调用event.stopImmediatePropagation()
,它将停止调用后续处理程序。
所以修改你的$('label').bind()
如下:
$('label').bind('click',function(event){
if($(this).hasClass('disabled') {
event.stopImmediatePropagation();
return false;
}
}
并将其移到您的其他.bind()
来电之上。然后,该特定处理程序将首先执行,并有机会阻止其他处理程序执行。
(注意.stopImmediatePropagation()
与.stopPropagation()
不同] - 后者阻止事件冒泡DOM树,但不会停止同一元素上的其他处理程序。)