2011-11-29 33 views
8

比方说,我有标签,我附上两个click事件给它:jQuery的停止调用其他处理程序

$('#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仅仅是一个虚拟的东西..我执行的一组动作,而不是说..上

回答

22

如果多个事件处理程序绑定到同一元素的实际标签的基础上各不同处理程序按照它们绑定的顺序被调用。如果在特定处理程序中调用event.stopImmediatePropagation(),它将停止后续处理程序的调用。

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

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

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

(注意:.stopImmediatePropagation()是不一样的.stopPropagation()] - 后者停止事件冒泡的DOM树,但在相同的元素不停止其他处理)

+0

+1不错..... ... – ManseUK

+0

<3333333333333333333 –

相关问题