2010-01-04 9 views
9

Nella mia pagina Web ho un elenco di file.Previene l'evento click del contenitore genitore dal momento in cui viene attivato il collegamento ipertestuale

Ogni file è nel proprio contenitore div (div class = "file"). All'interno del contenitore c'è un collegamento al file e una descrizione.

Desidero consentire a un utente di fare clic in qualsiasi punto del contenitore per scaricare il file. Ho fatto questo aggiungendo un evento click al contenitore e recuperando il href del collegamento figlio.

Come il file si apre in una nuova finestra, se l'utente fa effettivamente clic sul collegamento, il file si apre due volte.

Quindi ho bisogno di impedire che l'evento click del contenitore genitore venga attivato quando si fa clic sul collegamento ipertestuale. Il modo migliore per farlo sarebbe aggiungere una funzione click al collegamento ipertestuale a0 e impostare event.stopPropagation? Presumibilmente questo fermerebbe quindi l'evento dal ribollire fino al contenitore.

Grazie Ben

risposta

15

Nel modello Microsoft è necessario impostare la proprietà cancelBubble dell'evento su true.

window.event.cancelBubble = true; 

Nel modello del W3C è necessario chiamare il metodo dell'evento stopPropagation().

event.stopPropagation(); 

Ecco una soluzione cross-browser, se non si sta usando un quadro:

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

Questo è un po 'di confusione dal momento che non si mostra ciò che si attacca a cosa. – daveagp

2

Grazie per l'aiuto.

Stavo usando jQuery, ma buono a capire la soluzione non quadro.

aggiunto il seguente per i collegamenti:

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

Ben

+0

Grazie! Stavo avendo esattamente questo problema, che era abbastanza fastidioso per il debug e questo lo risolse. Nel mio caso ho avuto un click handler per .pub e poi ho aggiunto la riga $ (". Pub a"). Click (function (e) {e.stopPropagation();}); – daveagp

+0

non restituisce false dalla funzione del gestore eventi ha lo stesso effetto? – Johnus

+0

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

Problemi correlati