171 votes

Comment faire en sorte qu'une balise d'ancrage ne renvoie à rien ?

J'utilise jQuery, je dois faire en sorte que certaines balises d'ancrage n'effectuent aucune action.

Je l'écris généralement comme ça :

<a href="#">link</a>

Cependant, il s'agit du haut de la page !

0 votes

Parce que jquery gérera l'événement de clic et je veux que le lien soit comme un lien achor mais se comporte comme une fonction JavaScript.

0 votes

1 votes

Comme mentionné dans l'une des réponses ci-dessous : si vous ne voulez pas qu'un lien pointe vers une ressource, n'utilisez pas l'élément A.

280voto

zaius Points 2947

Il existe quelques solutions moins que parfaites :

1. Lien vers une fausse ancre

<a href="#">

Problème : en cliquant sur le lien, on revient en haut de la page.

2. Utiliser une balise autre que "a".

Utilisez une balise span et utilisez le jquery pour gérer le clic.

Problème : la navigation au clavier est interrompue et il faut changer manuellement le curseur de survol.

3. Lien vers une fonction javascript void

<a href="javascript:void(0);">
<a href="javascript:;">

Problème : rupture lors de la liaison d'images dans IE

Solución

Comme toutes ces méthodes ont leurs problèmes, la solution que j'ai retenue consiste à créer un lien vers une fausse ancre, puis à renvoyer false à partir de la méthode onClick :

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

Ce n'est pas la solution la plus concise, mais elle résout tous les problèmes posés par les méthodes ci-dessus.

2 votes

J'utilise généralement l'approche javascript:void(0) ;, car l'utilisation de # affiche l'URL actuelle dans la barre de Firefox au passage de la souris, ce qui peut être trompeur pour l'utilisateur.

8 votes

breaks when linking images in IE Qu'est-ce que cela signifie ?

15 votes

@eugene cette question date de 3 ans maintenant, mais IE avait l'habitude de faire disparaître les images lorsqu'elles étaient entourées d'un lien vers une fonction void. Je ne sais pas quand cela a été corrigé, mais cela fonctionne dans IE10, qui est tout ce que j'ai installé. Personnellement, j'utilise maintenant <a href="javascript:;">

113voto

Tyson Points 3583

Si vous ne voulez pas qu'il pointe vers quoi que ce soit, vous ne devriez probablement pas utiliser l'attribut <a> (ancre) tag.

Si vous voulez que quelque chose ressemble à un lien mais ne se comporte pas comme un lien, il est préférable d'utiliser l'élément approprié (comme l'élément <span> ), puis de le styliser à l'aide de CSS :

<span class="fake-link" id="fake-link-1">Am I a link?</span>

.fake-link {
    color: blue;
    text-decoration: underline;
    cursor: pointer;
}

En outre, étant donné que vous avez étiqueté cette question "jQuery", je suppose que vous voulez joindre un gestionnaire d'événement de clic. Dans ce cas, il suffit de faire la même chose que ci-dessus et d'utiliser quelque chose comme le JavaScript suivant :

$('#fake-link-1').click(function() {
    /* put your code here */
});

39 votes

Il y a un problème : il ne permet pas la navigation par onglets.

7 votes

Notez que (comme Iraimbilanja le souligne) l'approche span ici désactive la possibilité d'invoquer la fonction en utilisant le clavier, ce que je considérerais comme un problème d'utilisabilité.

5 votes

C'est aussi un problème d'accessibilité. Vous pouvez le résoudre en utilisant un élément de type bouton (généré à partir de JavaScript afin que les utilisateurs qui n'utilisent pas JavaScript n'obtiennent pas un contrôle défectueux).

45voto

Philippe Leybaert Points 62715

Pour qu'il ne fasse rien du tout, utilisez ceci :

<a href="javascript:void(0)"> ... </a>

1 votes

Ou simplement <a href="javascript:;"> . P.S. ne fonctionne pas avec target=_blank bien que

37voto

Oli Points 65050

La bonne façon de procéder est de "rompre" le lien avec jQuery lorsque vous manipulez le lien.

HTML

<a href="#" id="theLink">My Link</a>

JS

$('#theLink').click(function(ev){
    // do whatever you want here

    ev.preventDefault();
    ev.stopPropagation();
});

Ces deux derniers appels empêchent le navigateur d'interpréter le clic.

5 votes

Bien que cela semble être "correct" parce que cela arrête le bouillonnement d'événements, "return false" est beaucoup moins verbeux et fait la même chose. La seule fois où vous voudriez faire cela, c'est si vous avez déjà des gestionnaires d'événements enregistrés pour les clics sur les liens via jQuery.

24voto

KristoferA Points 8036

Que voulez-vous dire par "rien" ?

<a href='about:blank'>blank page</a>

ou

<a href='whatever' onclick='return false;'>won't navigate</a>

1 votes

D'accord - il suffit de renvoyer false de votre méthode jQuery et voilà, il n'ira nulle part.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X