jQuery 停止 调用 其他 处理 程序

k10s72fa  于 2022-11-22  发布在  jQuery
关注(0)|答案(1)|浏览(94)

假设我有一个标签,并将两个单击事件附加到标签上:

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

zphenhs4

zphenhs41#

如果将多个事件处理程序绑定到同一事件的同一元素,则将按照绑定顺序调用处理程序。如果在特定处理程序中调用event.stopImmediatePropagation(),则将停止调用后续处理程序。
因此,请按如下所示修改$('label').bind()

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

并将其移到其他.bind()调用的上方,然后该特定处理程序将首先执行,并有机会阻止其他处理程序执行。
(Note .stopImmediatePropagation().stopPropagation()不同] -后者停止事件沿DOM树向上冒泡,但不停止同一元素上的其他处理程序。)

相关问题