2012-05-11 19 views
8

¿Cómo puedo detener onclick para que un elemento interno también haga clic en su elemento primario.jquery onclick que penetra en el elemento principal

<div id="1" onclick="alert('1')"> 
<div id="2" onclick="alert('2')"></div> 
</div> 

Si el segundo div (id = "2") es visible en la parte superior de la primera, y se hace clic en, recibirá alertas ambos 1 & 2.

Como puedo evitar esto por lo Solo recibo la alerta de lo que estoy (visiblemente) haciendo clic en, Sin deshabilitar por completo cualquier función onclick que pueda tener el div externo.

Ejemplo:http://jsfiddle.net/DPCx8/

Respuesta

7
​var outer = document.getElementById('outer'); 
outer.onclick = function(event) 
    { 
     alert('outer'); 
     event.stopPropagation(); 
    }​​ 
    var inner = document.getElementById('inner'); 
inner.onclick = function(event) 
    { 
     alert('inner'); 
     event.stopPropagation(); 
    } 

http://jsfiddle.net/DYykA/1/

+0

¡Gracias! Esto funciona perfectamente Estaba teniendo problemas para aplicar 'stopPropagation()', ¡así que esto ayuda! –

6

Es necesario stop the propagation en el niño, por lo que el evento no se suben a la matriz.

$("#inner").on("click", function(e){ 
    e.stopPropagation(); 
}); 
+0

gracias! Intenté poner esto en javascript y no puedo hacer que funcione. He puesto 'alert's antes y después y aún recibo la alerta 'externa' –

+0

@iight Estás agregando los manejadores directamente al HTML, no lo hagas. En cambio, agréguelo como lo hice anteriormente, con un selector de CSS a través de jQuery. – Sampson

+0

eso es lo que hice. Lo agregué como un script, no en el elemento en sí –

3

uso event.stopPropogation(); para evitar burbujeo del evento

+0

¡gracias! ¡Funciona genial! –

Cuestiones relacionadas