2012-03-30 9 views
7

Ich kann nicht scheinen, ein Beispiel zu finden, was ich hier versuche, aber ich bin sicher, dass es möglich ist.Funktion ausführen dann folgen Link

Beachten Sie Folgendes:

<div id="main_nav"> 
    <a href="/url/">LINK</a> 
    <a href="/url/">LINK</a> 
    <a href="/url/">LINK</a> 
    <a href="/url/">LINK</a> 
</div> 

Wie kann ich eine Funktion ausführen, wenn ein link innerhalb #main_nav bevor dann im Anschluss an die link geklickt wird?

Die folgenden Funktionen funktionieren nicht, da die Verknüpfung vor der Ausführung der Funktion eingehalten wird.

$('#main_nav a').click(function() { 
    // Some Function 
}); 

EDIT

Ich bin ein Cookie mit dem JQuery Cookie-Plugin löschen tatsächlich versuchen, wenn die Links angeklickt werden. Ich bin mir nicht sicher, ob das relevant ist oder nicht.

Die Clear-Cookie-Code ist:

$.cookie('TMMenu', null); 

TMMenu ist der richtige Name und das Plugin geladen wird.

EDIT

Leider jeder. Das Problem war eigentlich mit der JQuery Cookie plugin documentation.

$.cookie('TMMenu', null); 

wie in der Readme beschrieben scheint nicht zu funktionieren. Das tut:

$.cookie('TMMenu', null, { path: '/', expires: -5 }); 
+2

Es ist nichts falsch mit dieser Code. Der Hauptteil von 'click' wird ausgeführt und dann folgt der Link. Welches Problem siehst du? – JaredPar

+0

Klingt, als ob Sie einen Rückruf von einer Art benötigen. – j08691

+2

Versuchen Sie, ein asynchrones Verhalten auszuführen, bevor die Verknüpfung aufgerufen wird, z. B. eine Animation oder eine AJAX-Anforderung? – zzzzBov

Antwort

21

aktualisieren: Re Ihre edit: Ich kann keinen Grund sehen, die andere nicht als # funktionieren würde 1 unten.

ich auf diese Frage denke an zwei Antworten können:

  1. Sie Ihre jQuery-Code ausgeführt wird, bevor das #main_nav a Element vorhanden ist, und kein Event-Handler ist angeschlossen. Platzieren Sie Ihr Skript am Ende der HTML-Datei, unmittelbar vor dem schließenden Tag , oder verwenden Sie die ready callback.

  2. Sie tun etwas asynchron in Ihrem Handler, und es nicht passieren zu sehen.Sobald die Ereignisbehandlungsroutine zurückkehrt, folgt die Verknüpfung   —, selbst wenn Ihr Handler eine asynchrone Aktion initiiert.

Hier ist, wie die zweite zu beheben (beide, wenn Sie dies am Ende zu setzen oder in einem ready Handler):

$('#main_nav a').click(function(event) { 
    // Remember the link href 
    var href = this.href; 

    // Don't follow the link 
    event.preventDefault(); 

    // Do the async thing 
    startSomeAsyncThing(function() { 
     // This is the completion callback for the asynchronous thing; 
     // go to the link 
     window.location = href; 
    }); 
}); 

(Live copy | source)

+0

Ich werde Sie als richtig markieren, um ein interessantes Beispiel zu geben. Das Problem war tatsächlich mit dem Code, den ich verwendete, um einen Cookie zu löschen. Vielen Dank – Turnip

+0

@ 3rror404: Schön, dass Sie es nützlich fanden! So sehr ich den Repräsentanten schätze, es wäre besser, wenn Sie Ihre eigene Antwort schreiben würden, die sagt, was es war und dann (nach 48 Stunden) akzeptierte. Ich nehme eine Aufzählung, wenn du es noch nicht getan hast. ;-) (Oder Sie könnten Ihre Frage markieren und einen Moderator bitten, sie zu entfernen, da dies für andere wahrscheinlich nicht sinnvoll ist ...) –

+0

@TJCrowder Funktioniert diese Lösung für Links, die mit gedrückter Strg-Taste oder Rechtsklick angeklickt wurden in einem neuen Tab geöffnet? – pdoherty926

2

Hier ist, wie Sie es tun. Wenn Sie in Ihrem Click-Handler-Callback event.preventDefault aufrufen, wird die Standardaktion verhindert. Dann folgen Sie dem Link per Javascript einfach window.open(url) oder window.location = url.

$('#main_nav a').click(function(event) { 
    // Some Function 

    var url = $(this).attr('href'); // Get url from the <a> href attribute 
    window.open(url,"_self"); // Open the url in the current window. Set to "_blank" instead of "_self" to open in a new window. 

    event.preventDefault(); // Prevent default action (e.g. following the link) 
    return false; 
}); 

W3Schools hat mehr Informationen über den Unterschied zwischen window.open und window.location.