2009-09-16 50 views
6

Ok, pregunta simple:Prevenir javascript onclick el elemento hijo

<div onclick="javascript:manualToggle(this)"> 
    <span>Allowed to click</span> 
    <span>Not allowed to click</span> 
    <span>Allowed to click</span> 
</div> 

Sin replicar el manualToggle a los 2 tramos que están autorizados para hacer clic, ¿cómo puedo evitar que el "No se permite hacer clic en" periodo de cocción Es un evento div clic en el padre cuando se hace clic en?

Respuesta

2

Hace falta un controlador de eventos (es muy fácil de hacer esto en algo así como jQuery) que las capturas clics de los tramos dentro del div y sólo se activa la función si, por ejemplo, , el lapso tiene/no tiene una clase particular.

0

Posible solución: dar de identificación de la envergadura y comprobar si se permite que la identificación se ha hecho clic a hacer clic en su función

mala idea: que no sabe qué lapso se hace clic, ya que llama a la función de su div ...

1

con mootools se puede utilizar el método stopPropagation:

$('myChild').addEvent('click', function(ev){ 
    ev.stopPropagation(); // this will prevent the event to bubble up, and fire the parent's click event. 
}); 

ver http://mootools.net/docs/core/Native/Event#Event:stopPropagation

también ver esta pregunta muy similar: How can I stop an onclick event from firing for parent element when child is clicked?

+1

yay, Downvote una respuesta perfectamente válida (y trabajo)! – knittl

+1

downvote prolly para la biblioteca js que usted sugiere, al igual que Phoenix que sugieren jQuery – Natrium

+0

usando librerías es la forma más fácil (y más compatible con el navegador) – knittl

16

Dar el lapso de un identificador de un adjuntar evento onclick al mismo y utilizarlo

Una muestra jQuery

$("#spn2").click(function(event){ 
    event.stopPropagation(); 
}); 

event.stopPropagation(): detiene el burbujeo de un evento de elementos primarios, evitando cualquier controlador de matrices de ser notificado del evento.

+2

Es el voto negativo para una respuesta de jQuery – rahul

+0

Fui por algo similar, pero no con StopPropagation. (No he votado nada en esta pregunta ...) – Paul

+1

Hay una diferencia entre una respuesta correcta y una solución que funcionó. Esta es en realidad una respuesta correcta a esta pregunta. ¡Gracias! – jmilloy

6

No tendría sentido utilizar una biblioteca, pero sin que pueda probar esto (editada con una página entera para probar):

<html><head></head> 
<body> 
<script type="text/javascript"><!-- 
function manualToggle(val) 
{ 
    alert(val.id); 
} 

--></script> 

<div id="test" onclick="manualToggle(this);"> 
    <span>Allowed to click</span> 
    <span onclick="event.cancelBubble=true;if (event.stopPropagation) event.stopPropagation();">Not allowed to click</span> 
    <span>Allowed to click</span> 
</div> 
</body> 
</html> 
+0

'event'? 'e'? parece que falta algo – knittl

+0

Thx, e no funciona. Solo lo probé en un navegador cancelBubble, lo cambié al evento (que es window.event) y puse un código de prueba allí. Funciona al menos en FF 3.5 e IE7 – Daff

Cuestiones relacionadas