jquery停止调用其他处理程序

时间:2011-11-29 11:28:08

标签: javascript jquery javascript-events

假设我有标签,并且我附加了两个点击事件:

$('#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只是一个虚拟的东西..我正在执行一系列操作而不是那些...每个根据实际标签的不同

1 个答案:

答案 0 :(得分:22)

如果多个事件处理程序绑定到同一事件的同一元素,则处理程序将按绑定的顺序调用。如果在特定处理程序中调用event.stopImmediatePropagation(),它将停止调用后续处理程序。

所以修改你的$('label').bind()如下:

$('label').bind('click',function(event){
   if($(this).hasClass('disabled') {
      event.stopImmediatePropagation();
      return false;
   }
}

并将其移到您的其他.bind()来电之上。然后,该特定处理程序将首先执行,并有机会阻止其他处理程序执行。

(注意.stopImmediatePropagation().stopPropagation()不同] - 后者阻止事件冒泡DOM树,但不会停止同一元素上的其他处理程序。)