2010-01-04 16 views
9

En mi página web tengo una lista de archivos.Evitar que el evento de clic del contenedor principal se active cuando se hace clic en el hipervínculo

Cada archivo está en su propio contenedor div (div class = "file"). Dentro del contenedor hay un enlace al archivo y una descripción.

Quería permitir que un usuario haga clic en cualquier lugar del contenedor para descargar el archivo. Hice esto agregando un evento de clic al contenedor y recuperando el href del enlace secundario.

Como el archivo se abre en una nueva ventana, si el usuario realmente hace clic en el enlace, el archivo se abre dos veces.

Por lo tanto, debo evitar que se active el evento de clic del contenedor principal cuando se hace clic en el hipervínculo. ¿La mejor manera de hacerlo sería agregar una función de clic al hipervínculo to0 y establecer event.stopPropagation? Es de suponer que esto evitaría que el evento burbujee hasta el contenedor.

Gracias Ben

Respuesta

15

En el modelo de Microsoft, debe establecer la propiedad cancelBubble del evento en verdadero.

window.event.cancelBubble = true; 

En el modelo W3C debe llamar al método stopPropagation() del evento.

event.stopPropagation(); 

Aquí es una solución multi-navegador si no está utilizando un marco:

function doSomething(e) { 
    if (!e) e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
+4

Esto es un poco confuso ya que no se muestra qué se adhiere a qué. – daveagp

2

Gracias por la ayuda.

Estaba usando jQuery, pero es bueno para entender la solución no marco.

añadido lo siguiente para los enlaces:

$(".flink").click(function(e) { 
     e.stopPropagation(); 
    }); 

Ben

+0

¡Gracias! Estaba teniendo exactamente este problema, lo cual fue bastante molesto depurar y esto lo resolvió. En mi caso, tenía un controlador de clics para .pub y luego agregué la línea $ (". Pub a"). Clic (función (e) {e.stopPropagation();}); – daveagp

+0

no devuelve falso desde la función del controlador de eventos tiene el mismo efecto? – Johnus

+0

@Johnus - no, no - ver http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ –

Cuestiones relacionadas