Ich habe die folgenden Methoden zum Einfügen von JavaScript-Code in ein <a>
Tag gesehen:
function DoSomething() { ... return false; }
<a href="javascript:;" onClick="return DoSomething();">link</a>
<a href="javascript:DoSomething();">link</a>
<a href="javascript:void(0);" onClick="return DoSomething();">link</a>
<a href="#" onClick="return DoSomething();">link</a>
Ich verstehe die Idee, eine gültige URL anstelle von nur JavaScript-Code einzufügen, nur für den Fall, dass der Benutzer kein JavaScript aktiviert hat. Für diese Diskussion muss ich jedoch davon ausgehen, dass JavaScript aktiviert ist (ohne JavaScript können sie sich nicht anmelden).
Ich persönlich mag Option 2, da Sie sehen können, was ausgeführt werden soll - besonders nützlich beim Debuggen, wenn Parameter an die Funktion übergeben werden. Ich habe es ziemlich oft benutzt und keine Browserprobleme gefunden.
Ich habe gelesen, dass die Leute 4 empfehlen, weil es dem Benutzer einen echten Link gibt, dem er folgen kann, aber wirklich, # ist nicht "echt". Es wird absolut nirgendwo hingehen.
Gibt es eine, die nicht unterstützt wird oder wirklich schlecht ist, wenn Sie wissen, dass der Benutzer JavaScript aktiviert hat?
Verwandte Frage: Href für JavaScript-Links: "#" oder "Javascript: void (0)"? .
quelle
Antworten:
Ich mag Matt Kruses Javascript Best Practices-Artikel sehr . Darin erklärt er, dass die Verwendung des
href
Abschnitts zum Ausführen von JavaScript-Code eine schlechte Idee ist. Obwohl Sie angegeben haben, dass für Ihre Benutzer JavaScript aktiviert sein muss, gibt es keinen Grund, warum Sie keine einfache HTML-Seite haben können, auf die alle Ihre JavaScript-Links für ihrenhref
Abschnitt verweisen können, falls jemand JavaScript nach dem Anmelden deaktiviert. Ich möchte Sie sehr ermutigen, diesen Fallback-Mechanismus weiterhin zuzulassen. So etwas wird sich an "Best Practices" halten und Ihr Ziel erreichen:quelle
Warum sollten Sie dies tun, wenn Sie
addEventListener
/ verwenden könnenattachEvent
? Wenn es keinhref
Äquivalent gibt, verwenden Sie kein<a>
, verwenden Sie ein<button>
und formatieren Sie es entsprechend.quelle
Sie haben eine andere Methode vergessen:
Mit dem JavaScript-Code:
Ich kann nicht kommentieren, welche der Optionen die beste Unterstützung bietet oder welche semantisch die beste ist, aber ich möchte nur sagen, dass ich diesen Stil sehr bevorzuge, da er Ihren Inhalt von Ihrem JavaScript-Code trennt. Es hält den gesamten JavaScript-Code zusammen, was viel einfacher zu pflegen ist (insbesondere wenn Sie dies auf viele Links anwenden), und Sie können ihn sogar in eine externe Datei einfügen, die dann gepackt werden kann, um die Dateigröße zu verringern und von Client-Browsern zwischengespeichert zu werden.
quelle
Ich werde das tun oder:
Kommt auf die Situation an. Für größere Apps ist die zweite am besten geeignet, da sie dann Ihren Ereigniscode konsolidiert.
quelle
Methode 2 hat einen Syntaxfehler in FF3 und IE7. Ich bevorzuge die Methoden Nr. 1 und Nr. 3, da Nr. 4 den URI mit '#' verschmutzt, obwohl dies weniger Typisierung verursacht ... Wie in anderen Antworten angegeben, ist die beste Lösung offensichtlich, HTML von der Ereignisbehandlung zu trennen.
quelle
return false
. Aus diesem Grund ist Methode 4 wahrscheinlich die beste (von den aufgeführten).Ein Unterschied, den ich zwischen diesen bemerkt habe:
und das:
ist das, wenn in beiden Fällen Sie haben:
dann wird für das erste Beispiel
act2
vorher ausgeführtact1
und im zweiten Beispiel ist es umgekehrt.quelle
Nur moderne Browser
Browserübergreifend
Sie können dies ausführen, bevor das Dokument fertig ist. Wenn Sie auf die Schaltflächen klicken, funktioniert dies, da das Ereignis an das Dokument angehängt wird.
Quellen:
quelle