Erstellen Sie einen HTML-Link, der nichts tut (buchstäblich nichts)

87

Ich möchte einen Link, der nichts tut. Ich will das nicht:

<a href="#">

denn dann wird die URL something.com/whatever/#.

Der einzige Grund, warum ich einen Link möchte, ist, dass der Benutzer sehen kann, dass er auf den Text klicken kann. JavaScript wird verwendet, um eine Aktion auszuführen, sodass ich den Link nicht brauche, um irgendwohin zu gelangen, aber ich brauche ihn, um wie ein Link auszusehen!

Ich könnte ein Datenattribut verwenden und mir CSS sagen, damit Elemente wie Links aussehen, wenn sie dieses Attribut haben, aber es scheint ein bisschen übertrieben.

Ale
quelle
Was ist los mit something.com/whatever/#?
Charles Sprayberry
1
Sie könnten ihm ein href von leer geben und im Javascript false zurückgeben. Aber es ist semantischer, wenn Sie nur die pointer
Cursoreigenschaft
@ CharlesSprayberry: Es gibt Situationen, in denen Sie es nicht wollen.
PeeHaa
Dies wäre auch eine gute Frage auf ux.stackexchange.com .
1
Diese Frage wird hier ausführlicher
DawnPaladin

Antworten:

124

Das Folgende verhindert, dass Ihr href ausgeführt wird

<a href="#" onclick="return false;">

Wenn Sie jQuery verwenden, event.preventDefault()kann verwendet werden

Curt
quelle
Bewirkt, dass zusätzliche Onclick-Ereignisse abgebrochen werden.
Rauli Rajande
5
Bewirkt, dass die Seite nach oben scrollt.
David Hempy
@ DavidHempy Ich erlebe das nicht. Welcher Browser?
Curt
1
@curt Google Chrome Version 63.0.3239.84 (Official Build) (64-Bit) (oder möglicherweise eine etwas ältere Version vor zwei Wochen)
David Hempy
Dies funktioniert nicht für WordPress Plugin Scrollen Sie zu ID und Link wird immer noch etwas tun. In diesem Fall handelt es sich um eine fehlerhafte Sache, die Sie oben auf der Seite weiterleitet.
Jiri Otoupal
88

Versuche dies:

<a href="javascript:void(0);">link</a>
alexdets
quelle
4
+1 aber kurze Frage: Gibt es einen Unterschied zwischen javascript:voidund javascript:void(0)?
Adam Rackis
3
Wenn Sie versuchen, Javascript: void (0) ohne Parameter zu verwenden, haben Sie SyntaxError und alle Ihre Skripte werden fehlschlagen.
Alexdets
3
@alexdets javascript:void()ist SyntaxError, gibt jedoch javascript:voidnur undefiniert zurück - genau wie void(0). Adam, soweit ich das beurteilen kann, voidund void(0)sind für diese Verwendung funktional gleichwertig. --- bearbeiten: obwohl ich andere Kommentare sehe, die darauf hindeuten, dass es die Seite neu laden könnte ..
andytuba
3
Ist es wichtig, wie Sie JavaScript / Javascript / JavaScript / Javascript groß schreiben?
Tim Truston
2
@TechyTimo Nein, die Großschreibung spielt keine Rolle, tatsächlich sollte sie nicht großgeschrieben werden. Ich habe eine Bearbeitung eingereicht.
Weston Ganger
28

In HTML5 ist dies sehr einfach. Lassen Sie einfach das hrefAttribut weg .

<a>Do Nothing</a>

Von MDN auf das Attribut a tag href :

href

Dies war das einzige erforderliche Attribut für Anker, die einen Hypertext-Quelllink definieren, wird jedoch in HTML5 nicht mehr benötigt.


Was ist mit dem Handcursor beim Schweben?

Die Standardstile für einen Browser ändern den Cursor möglicherweise nicht in einen Zeiger für aTags mit der Nummer href. Sie können dies universell mit dem folgenden CSS ändern.

a {
    cursor: pointer;
}
<a>Do Nothing</a>

Es ist jedoch wahrscheinlich besser, selektiver vorzugehen und es nur auf die Elemente anzuwenden, denen Sie Ereignishandler hinzufügen möchten.


Was ist damit, es tab-fokussierbar zu machen?

Fügen Sie einfach tabindex="0"dem Element hinzu.

<a tabindex="0">Do Nothing</a>


Ist es sinnvoll, ein aTag ohne Link zu verwenden?

Normalerweise nein, es ist wahrscheinlich besser, buttonstattdessen ein Element zu verwenden und es mit CSS zu formatieren. Vermeiden Sie jedoch, was auch immer Sie verwenden, die Verwendung eines beliebigen Elements, divwenn dies möglich ist, da dies überhaupt nicht semantisch ist.

Alexander O'Mara
quelle
1
Mit Bootstrap 4 werden Links ohne href nicht als Links gestaltet.
user3413723
13

Machen Sie keinen Link daraus (obwohl dies bevorzugt wird) und gestalten Sie ihn mit CSS so, dass er wie ein Link aussieht:

p.not-a-link { text-decoration: underline; cursor: pointer } 

Oder machen Sie es einfach zu einem Link und lassen Sie die Javascript-Funktion, die verwendet wird e.preventDefault(), um den Link zu verhindern.

Fügen Sie außerdem den Link zu hinzu, hrefdamit Benutzer ohne aktiviertes JS ihn weiterhin verwenden können (als Fallback).

PeeHaa
quelle
1
+1 Wäre nach Abschluss der IE5.5-Debatte eine Spanne besser als ap?
Amelvin
1
Ich bevorzuge span. P könnte eine neue Reihe machen, während span nicht
Ronnie Oosting
9

<a href="javascript:;">Link text</a> - das benutze ich normalerweise

Scott Brown
quelle
5
Wird die Seite nicht mit einigen Browsern neu geladen?
Curt
@Curt: Sie haben Recht, lesen Sie die Frage falsch. Sie haben einen Kommentar positiv bewertet :-)
Scott Brown
... und ich habe 2 Downvotes, darunter eine nach der Bearbeitung! Hart!
Scott Brown
Entferne den ersten Code, dann darf ich meine Downvote entfernen :) Ich kann die Downvote nicht entfernen, sie ist "gesperrt"
Curt
1
Welche Browser sind davon betroffen, ist es immer noch ein Problem? Dies wäre vorzuziehen void(0), da es in der Statusleiste angezeigt wird. Ich sage das, weil ich Benutzer es als Fehler / Fehler kennzeichnen (was es offensichtlich nicht ist), also denke ich, dass es für sie verwirrend ist, es nicht zu haben.
chunk_split
4

Wir können dies erreichen, indem wir Javascript void verwenden, bei dem normalerweise ein Ausdruck ausgewertet und undefiniert zurückgegeben wird, einschließlich des Hinzufügens javascript:void(0);der href.

Der void-Operator wird normalerweise nur verwendet, um einen undefinierten Grundwert zu erhalten, normalerweise unter Verwendung von "void (0)" (was "void 0" entspricht). In diesen Fällen kann stattdessen die globale Variable undefined verwendet werden (vorausgesetzt, sie wurde keinem nicht standardmäßigen Wert zugewiesen).

a {
  text-decoration: initial;
}
<a href="javascript:void(0);"> This link actually does nothing when clicked</a>

Krafty Coder
quelle
2

Die Antwort von @ Curt wird funktionieren, aber Sie können einen Cursor-Stil in CSS verwenden, damit er wie ein Link aussieht, ohne einen falschen Link zu generieren. Verwenden Sie je nach Browserkonformität Hand oder Zeiger.

Browserübergreifende konforme Zeiger-CSS (aus dem Cursor- Styleguide):

element {
    cursor: pointer;
    cursor: hand;
}
Amelvin
quelle
@PeeHaa Verwenden Sie den Zeiger nur, wenn Sie nicht möchten, dass er in IE5.5 und früher funktioniert!
Amelvin
3
Das ist, was ich gesagt habe! Bitte erwähnen Sie nicht IE5.5: P Ernsthafter ist die IE5.5-Freigabe 0.17%. Wenn die Leute immer noch auf dieser Version sind, haben sie es nicht verdient, im Internet zu surfen
PeeHaa
2

Eine Möglichkeit, die niemand erwähnt hat, besteht darin, die href auf einen leeren lokalen Dateispeicherort wie diesen zu verweisen

<a href='\\'>my dead link</a>

Warum? Wenn Sie ein Framework wie "Reagieren" oder "Winkel" verwenden, gibt der Compiler einige Warnungen aus, die Ihr Protokoll oder Ihre Konsole verschmutzen können. Diese Technik verhindert auch, dass Roboter oder Spinnen Dinge falsch verbinden.

1-14x0r
quelle
-1

NICHT VERWENDEN <a>... stattdessen verwenden <span class='style-like-link'> und dann die Klasse verwenden, um sie zu formatieren , wie Sie möchten.

Bryce
quelle
Es ist nichts falsch mit mit einem Anker - Tag ohne einen Link selbst, nicht zu erwähnen , dass es viele Fälle , in denen es viel machen würde mehr Sinn , so zu tun, anstatt zu ersetzen sie durch einen pseudo-Anker - Tag. Ganz zu schweigen davon, ein Element so zu gestalten, dass es wie ein anderes aussieht, aber anders implementiert wird, wird in Zukunft Probleme mit der Wartung verursachen
Tim
Einverstanden. Es hängt ganz vom Anwendungsfall und dem ab, was Sie erreichen möchten. Ich habe dies lediglich als Antwort gegeben, damit andere wissen, dass dies eine Option ist.
Bryce
Wenn dies der Fall ist, würde ich vorschlagen, es zu bearbeiten, um eine Sprache zu verwenden, die zeigt, dass es eine mögliche Alternative ist, anstatt in Großbuchstaben anzugeben, kein Standard-Ankertag dafür zu verwenden, wenn dies vollkommen gültig ist
Tim