Créez un lien HTML qui ne fait rien (littéralement rien)

87

Je veux un lien qui ne fait rien. Je ne veux pas ça:

<a href="#">

car alors l'URL devient something.com/whatever/#.

La seule raison pour laquelle je veux un lien est que l'utilisateur puisse voir qu'il peut cliquer sur le texte. JavaScript est utilisé pour effectuer une action, je n'ai donc pas besoin du lien pour aller n'importe où, mais j'ai besoin qu'il ressemble à un lien!

Je pourrais utiliser un attribut de données et me dire CSS pour que les éléments ressemblent à des liens s'ils ont cet attribut, mais cela semble un peu exagéré.

ale
la source
Quel est le problème avec something.com/whatever/#?
Charles Sprayberry
1
vous pouvez lui donner un href vide et renvoyer false dans le javascript. Mais c'est plus sémantique si vous changez simplement la propriété du curseur pointerdans votre CSS
JohnP
@CharlesSprayberry: Il y a des situations que vous ne voulez pas.
PeeHaa
Ce serait également une bonne question à poser sur ux.stackexchange.com .
1
Cette question est discutée plus en profondeur ici: stackoverflow.com/questions/134845/…
DawnPaladin

Réponses:

124

Ce qui suit empêchera votre href d'être exécuté

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

Si vous utilisez jQuery, event.preventDefault()peut être utilisé

Sec
la source
Provoque l'annulation d'événements onclick supplémentaires.
Rauli Rajande
5
Fait défiler la page vers le haut.
David Hempy
@DavidHempy Je ne connais pas ça. Quel navigateur?
Curt
1
@curt Google Chrome Version 63.0.3239.84 (version officielle) (64 bits) (ou peut-être une version légèrement plus ancienne il y a deux semaines)
David Hempy
Cela ne fonctionne pas pour le plugin wordpress, faites défiler jusqu'à l'identifiant et le lien fera toujours quelque chose. Dans ce cas, ce sera un buggy qui vous redirigera en haut de la page.
Jiri Otoupal イ り オ ト ウ パ ー
88

Essaye ça:

<a href="javascript:void(0);">link</a>
Alexdets
la source
4
+1 mais question rapide: y a-t-il une différence entre javascript:voidet javascript:void(0)?
Adam Rackis
3
Si vous essayez d'utiliser javascript: void (0) sans param, vous aurez SyntaxError et tous vos scripts échoueront.
alexdets
3
@alexdets javascript:void()sera SyntaxError, mais javascript:voidrenvoie simplement undefined - identique à void(0). Adam, pour autant que je sache, voidet void(0)sont fonctionnellement équivalents pour cette utilisation. --- edit: bien que je vois d'autres commentaires qui suggèrent qu'il pourrait recharger la page ..
andytuba
3
La façon dont vous capitalisez javaScript / javascript / JavaScript / Javascript est-elle importante?
Tim Truston
2
@TechyTimo Non la capitalisation n'a pas d'importance, en fait elle ne doit pas être capitalisée. J'ai soumis une modification.
Weston Ganger
28

En HTML5, c'est très simple. Omettez simplement l' hrefattribut.

<a>Do Nothing</a>

De MDN sur l'attribut a tag href :

href

C'était le seul attribut requis pour les ancres définissant un lien source hypertexte, mais il n'est plus requis en HTML5.


Qu'en est-il du curseur de la main au survol?

Les styles par défaut d'un navigateur ne peuvent pas changer le curseur en pointeur, pour les abalises sans href. Vous pouvez changer cela de manière universelle avec le CSS suivant.

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

Cependant, il est probablement préférable d'être plus sélectif à ce sujet et de l'appliquer uniquement aux éléments auxquels vous avez l'intention d'ajouter des gestionnaires d'événements.


Qu'en est-il de le rendre focusable par tabulation?

Ajoutez simplement tabindex="0"à l'élément.

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


Est-il judicieux d'utiliser une abalise sans lien?

Habituellement non, il est probablement préférable d'utiliser un buttonélément à la place et de le styliser avec CSS. Mais quoi que vous utilisiez, évitez d'utiliser un élément arbitraire comme divlorsque cela est possible, car ce n'est pas du tout sémantique.

Alexander O'Mara
la source
1
Avec bootstrap 4, les liens qui n'ont pas de href ne sont pas stylisés comme des liens.
user3413723
13

Ne pas en faire un lien (bien qu'il soit préférable de le faire) et le styliser avec du CSS pour qu'il ressemble à un lien:

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

Ou mieux encore, faites-en un lien et laissez la fonction javascript qui est utilisée e.preventDefault()pour empêcher le lien.

Ajoutez également le lien vers le hrefafin que les utilisateurs sans JS activé puissent toujours l'utiliser (comme solution de secours).

PeeHaa
la source
1
+1 Une fois le débat IE5.5 terminé, un span serait-il meilleur qu'un ap?
amelvin
1
Je préfère span. P pourrait faire une nouvelle ligne, alors que span ne le fait pas
Ronnie Oosting
9

<a href="javascript:;">Link text</a> - c'est ce que j'utilise habituellement

Scott Brown
la source
5
Cela ne rechargera-t-il pas la page avec certains navigateurs?
Curt
@Curt: Vous avez raison, vous avez mal lu la question. Vous avez un commentaire à ce sujet :-)
Scott Brown
... et j'ai 2 votes négatifs, dont un après l'avoir édité! Dur!
Scott Brown
Supprimez le premier code, puis je serai autorisé à supprimer mon vote contre :) Il ne me permettra pas de supprimer le vote contre, il est "verrouillé"
Curt
1
Quels navigateurs cela affecte-t-il, est-ce toujours un problème? Cela serait préférable à void(0), car il apparaît dans la barre d'état. Je dis cela parce que les utilisateurs l'ont signalé comme un bogue / erreur (ce qui n'est évidemment pas le cas), donc je pense que l'avoir est déroutant pour eux.
chunk_split
4

Nous pouvons y parvenir en utilisant javascript void qui implique normalement l'évaluation d'une expression et le retour d'undefined, ce qui inclut l'ajout javascript:void(0);de href.

L'opérateur void est généralement utilisé simplement pour obtenir une valeur primitive non définie, en utilisant généralement «void (0)» (qui équivaut à «void 0»). Dans ces cas, la variable globale non définie peut être utilisée à la place (en supposant qu'elle n'a pas été affectée à une valeur autre que celle par défaut).

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

Codeur Krafty
la source
2

La réponse de @ Curt fonctionnera, mais vous pouvez utiliser un style de curseur en css pour le faire ressembler à un lien sans avoir à vous soucier de générer un faux lien. Utilisez la main ou le pointeur selon la conformité du navigateur.

Css de pointeur conforme au navigateur croisé (à partir du guide de style du curseur ):

element {
    cursor: pointer;
    cursor: hand;
}
Amelvin
la source
@PeeHaa N'utilisez le pointeur que si vous ne voulez pas qu'il fonctionne dans IE5.5 et versions antérieures!
amelvin
3
C'est ce que j'ai dit! Veuillez ne pas mentionner IE5.5: P Sur une note plus sérieuse, la part d'IE5.5 est 0.17%. Si les gens
utilisent
2

une façon que personne n'a mentionnée est de pointer le href vers un emplacement de fichier local vide comme ceci

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

Pourquoi? Si vous utilisez un framework tel que react ou angular, le compilateur crachera des avertissements qui peuvent rendre votre journal ou votre console sale. Cette technique empêchera également les robots ou les araignées de mal lier les choses.

1-14x0r
la source
-1

NE PAS UTILISER <a>... à la place, utilisez <span class='style-like-link'> puis utilisez la classe pour la styliser comme vous le souhaitez.

Bryce
la source
Il n'y a rien de mal à utiliser une balise d'ancrage sans lien lui-même, sans compter qu'il existe de nombreux cas où il serait beaucoup plus logique de le faire, plutôt que de la remplacer par une pseudo-balise d'ancrage. Sans parler de styliser un élément pour qu'il ressemble à un autre mais qu'il soit implémenté différemment, il est lié à des problèmes de maintenance à l'avenir
Tim
D'accord. Cela dépend entièrement du cas d'utilisation et de ce que vous essayez d'accomplir. J'ai simplement fourni cela comme une réponse pour aider les autres à savoir que c'est une option.
Bryce
Si tel est le cas, je suggérerais de le modifier pour utiliser un langage qui montre que c'est une alternative possible, plutôt que d'indiquer en majuscules de ne pas utiliser de balise d'ancrage standard pour cela, quand il est parfaitement valide de le faire
Tim