4437 Stimmen

Welchen "href"-Wert sollte ich für JavaScript-Links verwenden, "#" oder "javascript:void(0)"?

Im Folgenden werden zwei Methoden zum Aufbau einer Verknüpfung beschrieben, die ausschließlich dazu dient, JavaScript-Code auszuführen. Welche ist besser in Bezug auf Funktionalität, Seitenladegeschwindigkeit, Validierung usw.?

function myJsFunc() {
    alert("myJsFunc");
}

<a href="#" onclick="myJsFunc();">Run JavaScript Code</a>

oder

function myJsFunc() {
    alert("myJsFunc");
}

 <a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a>

14 Stimmen

Warum einen Link verwenden, wenn Sie eine Schaltfläche wünschen? Dann gibt es kein Problem mit Pseudo-Protokollen.

2 Stimmen

"Validierungszwecke" - Ah, das hätte das rote Fähnchen sein sollen, das anzeigt, dass diese Frage alt ist. Niemand kümmert sich mehr um Validierung oder Web-Standards. Es gab eine kurze Periode, in der es wichtig war und die Dinge gut aussahen, aber jetzt macht jeder jeden Müll, den er will ( Husten youtube Husten ), und die Browser nehmen sie auf, wie der IE der 90er Jahre.

152voto

Zach Punkte 23836

Die erste, idealerweise mit einem echten Link, dem man folgen kann, falls der Benutzer JavaScript deaktiviert hat. Stellen Sie sicher, dass Sie false zurückgeben, um zu verhindern, dass das Click-Ereignis ausgelöst wird, wenn das JavaScript ausgeführt wird.

<a href="#" onclick="myJsFunc(); return false;">Link</a>

Wenn Sie Angular2 verwenden, funktioniert dieser Weg:

<a [routerLink]="" (click)="passTheSalt()">Click me</a> .

Siehe hier https://stackoverflow.com/a/45465728/2803344

20 Stimmen

In User-Agents mit aktiviertem JavaScript und unterstützter Funktion wird also eine JavaScript-Funktion ausgeführt, die (bei User-Agents, bei denen JS aus irgendeinem Grund fehlschlägt) auf einen Link zum Anfang der Seite zurückgreift? Dies ist selten ein sinnvoller Rückgriff.

26 Stimmen

"idealerweise mit einem echten Link zu folgen, falls der Benutzer JavaScript deaktiviert hat", sollte es zu einer nützlichen Seite gehen nicht #, auch wenn es nur eine Erklärung, dass die Website JS braucht, um zu funktionieren. wie für fehlgeschlagen, würde ich erwarten, dass der Entwickler ordnungsgemäße Browser-Funktion Erkennung, etc. vor der Bereitstellung zu verwenden.

110voto

fijter Punkte 17127

Weder noch, wenn Sie mich fragen;

Wenn Ihr "Link" nur dazu dient, einen JavaScript-Code auszuführen, handelt es sich nicht um einen Link, sondern um ein Stück Text, an das eine JavaScript-Funktion gekoppelt ist. Ich würde empfehlen, einen <span> Tag mit einer onclick handler und einige grundlegende CSS-Funktionen, um einen Link zu imitieren. Links sind für die Navigation gedacht, und wenn Ihr JavaScript-Code nicht für die Navigation gedacht ist, sollte er nicht zu einem <a> Tag.

Beispiel:

function callFunction() { console.log("function called"); }

.jsAction {
    cursor: pointer;
    color: #00f;
    text-decoration: underline;
}

<p>I want to call a JavaScript function <span class="jsAction" onclick="callFunction();">here</span>.</p>

138 Stimmen

Bei diesem Ansatz wird die Verknüpfung nur mit der Maus durchgeführt. Ein Anker kann über die Tastatur besucht werden und sein "onclick"-Ereignis wird ausgelöst, wenn die Eingabetaste gedrückt wird.

46 Stimmen

Das Festcodieren von Farben in Ihrem CSS würde verhindern, dass der Browser benutzerdefinierte Farben verwendet, was ein Problem für die Barrierefreiheit darstellen kann.

39 Stimmen

<span> s sind nicht dazu gedacht tun alles. <A> nchoren und <buttons> werden dafür verwendet!

107voto

Steve Paulo Punkte 17528

Im Idealfall tun Sie dies:

<a href="javascriptlessDestination.html" onclick="myJSFunc(); return false;">Link text</a>

Noch besser wäre es, wenn Sie den Standard-Aktionslink im HTML-Code hätten und das Onclick-Ereignis dem Element unauffällig über JavaScript hinzufügen würden, nachdem das DOM gerendert wurde, um so sicherzustellen, dass Sie, wenn JavaScript nicht vorhanden ist/verwendet wird, keine nutzlosen Event-Handler haben, die Ihren Code durcheinander bringen und möglicherweise Ihren eigentlichen Inhalt verschleiern (oder zumindest davon ablenken).

78voto

Spammer Joe Punkte 41

Mit nur # macht ein paar komische Bewegungen, daher würde ich empfehlen, die #self wenn Sie sich den Aufwand für die Eingabe von JavaScript bla, bla, .

36 Stimmen

Als Referenz, #self scheint keine Besonderheit zu sein. Jeder Fragmentbezeichner, der nicht mit dem Namen oder der id eines Elements im Dokument übereinstimmt (und nicht leer oder "top" ist), sollte die gleiche Wirkung haben.

0 Stimmen

Hat die gleiche Wirkung, wie cHao sagte. Sie müssen nur false auf Element zurückgeben a wenn sie angeklickt wird ( onclick )

72voto

se_pavel Punkte 2087

Ich verwende die folgenden

<a href="javascript:;" onclick="myJsFunc();">Link</a>

stattdessen

<a href="javascript:void(0);" onclick="myJsFunc();">Link</a>

0 Stimmen

href="javascript:" y href="javascript:void 0;" sind alle gleichwertig, aber sie sind alle gleich schlecht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X