2011-11-29 108 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 –