2009-09-09 10 views
27

tengo un árbol de divs:ejecución Prevenir de controlador de eventos padre

<div id="a" onclick="func"> 
    <div id="b" onclick="func"> 
     <div id="c" onclick="func"> 
     </div> 
    </div> 
</div> 

Cuando un clic se hace en un div que hace que sea de los niños invisibles - es decir, haga clic en "una" a su vez "b" y " c "invisible".

function func{ 
    if ($(childId).hasClass("visible")){ 
    $(childId).removeClass("visible"); 
    $(childId).addClass("invisible"); 
} 

El problema es: un clic en "b" llamará "a" 's y hacer clic en "b" y "c" invisible. ¿Cómo desactivo el clic en "a" usando jQuery?

gracias

Respuesta

53

Puede agregar un controlador para el niño que va a evitar que el evento click se propaguen hasta:

function handler(event) { 
    event.stopPropagation(); 
    // now do your stuff   
} 
$('#a').add('#b').click(handler); 

De esta manera clics para '#b' no se propagará a '#a'. Tampoco hará clic en '#c' vaya a '#b', y por lo tanto no a '#a'.

+0

Esto es muy bueno, incluso funciona con $ (". ClickyClass a"). Haga clic en (función (e) {e.stopPropagation();}); asumiendo que .clickyClass tiene un manejador de clics – daveagp

+0

si esto también impide que bootstrap 'data-toggle =" colapso "' en el padre funcione? porque intento y fallo :( –

11

uso

event.stopPropagation()

detiene el burbujeo de un evento para elementos padre, evitando cualquier padre manipuladores de ser notificado del evento .

cuando se haga clic en byc

Cuestiones relacionadas