2010-01-04 15 views
9

Auf meiner Webseite habe ich eine Liste von Dateien.Verhindern, dass das Click-Ereignis des übergeordneten Containers ausgelöst wird, wenn der Hyperlink geklickt wurde

Jede Datei befindet sich in einem eigenen Container div (div class = "file"). Im Container befindet sich ein Link zur Datei und eine Beschreibung.

Ich wollte einem Benutzer erlauben, irgendwo auf den Container zu klicken, um die Datei herunterzuladen. Ich tat dies, indem ich dem Container ein click-Ereignis hinzufügte und die href des untergeordneten Links abrief.

Wenn die Datei in einem neuen Fenster geöffnet wird und der Benutzer auf den Link klickt, wird die Datei zweimal geöffnet.

So muss ich verhindern, dass das Klickereignis des übergeordneten Containers ausgelöst wird, wenn auf den Hyperlink geklickt wird. Wäre der beste Weg dies zu tun, eine Click-Funktion zum Hyperlink to0 hinzuzufügen und event.stopPropagation zu setzen? Vermutlich würde dies die Veranstaltung davon abhalten, bis zum Container zu sprudeln.

Dank Ben

Antwort

15

Im Microsoft-Modell müssen Sie die cancelBubble-Eigenschaft des Ereignisses auf true festlegen.

window.event.cancelBubble = true; 

Im W3C-Modell müssen Sie die stopPropagation() - Methode des Ereignisses aufrufen.

event.stopPropagation(); 

Hier ist eine Cross-Browser-Lösung, wenn Sie nicht, einen Rahmen mit:

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

Dies ist ein wenig verwirrend, da Sie nicht zeigen, was an was hängt. – daveagp

2

Danke für die Hilfe.

Ich war mit jQuery, aber gut, um nicht-Framework-Lösung zu verstehen.

addierten die folgenden für die Links:

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

Ben

+0

Danke! Ich hatte genau dieses Problem, was ziemlich nervig war zu debuggen und das hat es gelöst. In meinem Fall hatte ich einen Click-Handler für .pub und fügte dann die Zeile $ (". Pub a") hinzu. Click (function (e) {e.stopPropagation();}); – daveagp

+0

gibt false nicht von der Ereignishandler-Funktion den gleichen Effekt zurück? – Johnus

+0

@ Johnus - nein es nicht - siehe http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ –

Verwandte Themen