2009-08-28 23 views
70

Ich möchte ein Anchor-Tag erstellen, das etwas JavaScript ausführt und dann fortfährt, wohin auch immer die href es nahm. Das Aufrufen einer Funktion, die mein JavaScript ausführt und dann window.location oder top.location auf die Position href einstellt, funktioniert nicht für mich.HTML Anker Link - href und onclick beide?

Also, stell dir vor, ich habe ein Element mit der ID "Foo" auf der Seite. Ich möchte einen Anker an Autor ähnlich wie:

<a href="#Foo" onclick="runMyFunction(); return false;">Do it!</a> 

Wenn dieser angeklickt wird, ich will runMyFunction auszuführen und dann die Seite zu #Foo springen (kein Reload verursachen - top.location verwenden würde dazu führen, dass die Seite neu zu laden).

Vorschläge? Ich bin glücklich, jQuery verwenden, wenn es hier helfen kann ...

+0

'return true;' ist die Lösung, aber Sie können auch 'location.hash = '# Foo'' aufrufen. Die Seite wird nicht neu geladen. – shuangwhywhy

Antwort

110

Nur return true statt?

Der Rückgabewert vom onClick Code ist, was, ob die inhärente klickten Aktion der Verbindung bestimmt, verarbeitet oder nicht - Rückkehr false bedeutet, dass es nicht verarbeitet wird, aber wenn Sie true dann wird der Browser zurückkehren fortfahren, sie zu verarbeiten, nachdem Ihre Funktion kehrt zurück und geht zum richtigen Anker.

+0

Was ist, wenn onclick nichts zurückgibt? – maciek

+1

@maciek dann wird der Rückgabewert als "undefined" behandelt, was für diese Zwecke als falsch angesehen wird. – Amber

+1

In der Vergangenheit, wann immer ich verwenden würde Verwenden Sie eine JS-Funktion, um eine neue Seite zu starten, und nur ein "#" für das href-Attribut, würde ich "-1" zurückgeben, um die Standardaktion zu verhindern, die in der Regel der Browser ist Ich sprang auf den Anfang der Seite oder manchmal gab ich einfach nichts zurück. In letzter Zeit musste ich all diese Seiten überarbeiten, da @Amber empfohlen wurde, um speziell falsch zurückzugeben, wenn ich nicht möchte, dass die Seite springt. – Randy

7

Wenn der Link nur die Position ändern sollte, wenn die Funktion erfolgreich ausgeführt wurde, dann tun Sie onclick="return runMyFunction();" und in der Funktion würden Sie wahr oder falsch zurückgeben.

Wenn Sie nur die Funktion ausführen möchten und dann das Anker-Tag seine Arbeit machen lassen möchten, entfernen Sie einfach die return false-Anweisung.

Als eine Randnotiz sollten Sie wahrscheinlich stattdessen einen Event-Handler verwenden, da inline-JS ist nicht eine sehr gute Möglichkeit, Dinge zu tun.

23
<a href="#Foo" onclick="return runMyFunction();">Do it!</a> 

und

function runMyFunction() { 
    //code 
    return true; 
} 

diese Weise werden Sie Youf Funktion ausgeführt haben und Sie werden den Link folgen, und Sie werden den Link genau nach der Funktion folgen war erfolgreich ausgeführt werden.

+0

Scheint nicht zu funktionieren, wenn Ihre Funktion nach einem verzögerten Funktionsaufruf true zurückgibt? – DavidVdd