2011-11-29 10 views
8

Digamos que tengo las etiquetas y que adjuntar dos eventos de clic a ella:parada jQuery llamar a otro manejador

$('#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> 

Ahora no quiero que la alerta se muestra cuando la etiqueta que tiene clase disabled se hace clic. ¿Es posible hacer eso?

Nota: alert es sólo una cosa ficticia .. Estoy realizando una serie de acciones en lugar de eso .. cada uno diferente en función de la etiqueta real

Respuesta

22

Si hay varios controladores de eventos están ligados al mismo elemento para el el mismo evento en el que se llama a los controladores en el orden en que estaban vinculados. Si llama al event.stopImmediatePropagation() dentro de un manejador particular, detendrá los siguientes manejadores que se llamen.

Así modificar $('label').bind() de la siguiente manera:

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

y mover que hasta por encima de los otros .bind() llamadas. Entonces ese controlador particular se ejecutará primero y tendrá la posibilidad de evitar que los otros controladores se ejecuten.

(Tenga en cuenta que .stopImmediatePropagation() no es lo mismo que .stopPropagation()] -. Éste detiene la propagación de eventos hasta el árbol DOM, pero no para otros manipuladores en el mismo elemento)

+0

1 agradable ..... ... – ManseUK

+0

<3333333333333333333 –

Cuestiones relacionadas