1535 votes

Que signifie "javascript:void(0)" ?

<a href="javascript:void(0)" id="loginlink">login</a>

J'ai vu de telles href à plusieurs reprises, mais je ne sais pas ce que cela signifie exactement.

16 votes

javascript: est l'un des nombreux schémas URI : fr.wikipedia.org/wiki/URI_scheme comme data: .

7 votes

Vous pouvez utiliser seulement href="javascript:" dans le même but. Comme indiqué dans la réponse pour cette question le void(0) était à l'origine destinée aux premières versions des navigateurs dans lesquelles javascript: La gestion des URI était différente. Mais maintenant, je n'ai même pas pu trouver une version où le raccourci ne fonctionnait pas, au moins IE7 gère cela correctement.

1 votes

J'ai également vu href="javascript://", est-ce mieux ?

1143voto

rahul Points 84185

Le site void L'opérateur évalue l'expression donnée et renvoie ensuite undefined .

Le site void L'opérateur est souvent utilisé uniquement pour obtenir le undefined primitif en utilisant généralement " void(0) "(ce qui est équivalent à " void 0 "). Dans ces cas cas, la variable globale undefined peut être utilisé à la place (en supposant qu'il n'a pas été assigné à une valeur non par défaut).

Une explication est fournie ici : void opérateur .

La raison pour laquelle vous voudriez faire cela avec l'option href d'un lien est que normalement, un javascript: URL redirigera le navigateur vers une version en texte clair du résultat de l'évaluation de ce JavaScript. Mais si le résultat est undefined le navigateur reste sur la même page. void(0) est juste le plus petit script possible qui évalue comme undefined .

15 votes

Qu'est-ce que cela signifie quand on donne à href une "valeur primitive indéfinie" ?

12 votes

"normalement un javascript : url redirigera le navigateur vers une version en texte clair du résultat de l'évaluation de ce javascript. "Pouvez-vous donner un exemple ? Je n'ai jamais vu une telle utilisation.

0 votes

Si vous écrivez une fonction javascript sur onclick et si la fonction javascript retourne false alors ce false sera affiché dans le navigateur.

466voto

bobince Points 270740

En plus de la réponse technique, javascript:void signifie que l'auteur fait fausse route.

Il n'y a aucune raison valable d'utiliser un javascript: pseudo-URL(*). En pratique, cela entraînera des confusions ou des erreurs si quelqu'un essaie des choses comme "lien en signet", "ouvrir le lien dans un nouvel onglet", etc. Cela arrive assez souvent maintenant que les gens se sont habitués au clic du milieu pour le nouvel onglet : cela ressemble à un lien, vous voulez le lire dans un nouvel onglet, mais il s'avère que ce n'est pas du tout un vrai lien, et cela donne des résultats indésirables comme une page blanche ou une erreur JS quand on fait un clic du milieu.

<a href="#"> est une alternative commune qui peut être considérée comme moins mauvaise. Cependant, vous devez vous rappeler return false de votre onclick pour éviter que le lien ne soit suivi et que l'on fasse défiler la page jusqu'en haut.

Dans certains cas, il peut y avoir un endroit réellement utile vers lequel pointer le lien. Par exemple, si vous disposez d'un contrôle sur lequel vous pouvez cliquer et qui ouvre une fenêtre précédemment cachée <div id="foo"> il est logique d'utiliser <a href="#foo"> pour y accéder. Ou s'il existe un moyen non JavaScript de faire la même chose (par exemple, "thispage.php?show=foo" qui rend foo visible dès le départ), vous pouvez créer un lien vers celui-ci.

Sinon, si un lien pointe uniquement vers un script, ce n'est pas vraiment un lien et il ne doit pas être marqué comme tel. L'approche habituelle serait d'ajouter la balise onclick à un <span> , <div> ou un <a> sans un href et le styliser d'une manière ou d'une autre pour qu'il soit clair que vous pouvez cliquer dessus. C'est ce que StackOverflow [faisait au moment de la rédaction de ce document ; maintenant, il utilise l'option href="#" ].

L'inconvénient est que vous perdez le contrôle du clavier, puisque vous ne pouvez pas tabuler sur un span/div/bare-a ou l'activer avec un espace. La question de savoir s'il s'agit réellement d'un inconvénient dépend du type d'action auquel l'élément est destiné. Vous pouvez, au prix d'un certain effort, essayer d'imiter l'interactivité du clavier en ajoutant une balise tabIndex à l'élément, et à l'écoute d'une pression sur la touche Espace. Mais cela ne reproduira jamais à 100% le comportement réel du navigateur, notamment parce que différents navigateurs peuvent répondre au clavier différemment (sans parler des navigateurs non visuels).

Si vous voulez vraiment un élément qui n'est pas un lien mais qui peut être activé normalement par la souris ou le clavier, ce que vous voulez c'est un <button type="button"> (ou <input type="button"> est tout aussi bon, pour les contenus textuels simples). Vous pouvez toujours utiliser une feuille de style en cascade pour le faire ressembler davantage à un lien qu'à un bouton, si vous le souhaitez. Mais comme il se comporte comme un bouton, c'est comme ça que vous devez le marquer.

(* : dans la création de sites, en tout cas. Ils sont évidemment utiles pour les bookmarklets. javascript: Les pseudo-URL sont une bizarrerie conceptuelle : un localisateur qui ne pointe pas vers un emplacement, mais appelle du code actif à l'intérieur de l'emplacement actuel. Ils ont causé des problèmes de sécurité massifs tant pour les navigateurs que pour les applications web, et n'auraient jamais dû être inventés par Netscape).

7 votes

En complément de l'excellent article de @bobince : il y a quelques mois, j'ai effectué des recherches sur la navigabilité du clavier entre les navigateurs. href y compris les bizarreries et les effets secondaires ; certains d'entre vous pourraient trouver cela utile : jakub-g.github.com/accessibilité/onclick

1 votes

Merci, c'est utile. Cependant, je viens de vérifier add comment et bien qu'ils utilisent des classes et des ids, ils ont aussi un <a ... href='#'> <a id="comments-link-1291942" class="comments-link " title="Utilisez les commentaires pour demander plus d'informations ou suggérer des améliorations. Évitez de répondre aux questions dans les commentaires." href="#">add comment</a>

2 votes

@ThinkBonobo : SO a changé à un moment donné depuis 2009 ! Mis à jour.

130voto

Noon Silk Points 30396

Ça veut dire que ça ne fera rien. C'est une tentative pour que le lien ne "navigue" nulle part. Mais ce n'est pas la bonne méthode.

Vous devriez en fait juste return false dans le onclick comme ceci :

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

Il est généralement utilisé si le lien fait quelque chose de "JavaScript". Comme l'affichage d'un formulaire AJAX, ou l'échange d'une image, ou autre. Dans ce cas, il suffit de faire en sorte que la fonction appelée renvoie false .

Toutefois, pour que votre site soit totalement génial, vous incluez généralement un lien qui effectue la même action, si la personne qui le consulte choisit de ne pas exécuter JavaScript.

<a href="backup_page_displaying_image.aspx"
   onclick="return coolImageDisplayFunction();">hello</a>

0 votes

Href="#" ajoutera un "#" à l'url, ce qui est laid.

0 votes

Non seulement il ajoute # à l'url, mais il fait également passer le focus en haut du formulaire.

35 votes

No no - retourner false arrêtera le comportement par défaut, donc le # n'apparaîtra jamais

82voto

Salvin Francis Points 1408

Il y a une énorme différence entre le comportement de "#" et celui de javascript:void.

"#" vous fait défiler vers le HAUT de la page alors que "javascript:void(0) ;" ne le fait pas.

Ceci est très important si vous codez des pages dynamiques. l'utilisateur ne veut pas revenir en arrière juste parce qu'il a cliqué sur un lien dans la page.

29 votes

@Salvin : Le scroll-to-top-of-page peut être supprimé en retournant false au gestionnaire d'événements : onclick="doSomething();return false;" ou si doSomething() renvoie à false vous pouvez utiliser onclick="return doSomething();" .

48 votes

@GrantWagner - Ou, 5 ans plus tard, e.preventDefault() .

1 votes

Vous pourriez vouloir modifier/supprimer cette réponse car "#" fait pas défilement vers le haut lorsque vous retournez faux.

49voto

jscharf Points 2519

Vous devriez toujours avoir un href sur votre a tags. L'appel d'une fonction Javascript qui renvoie "undefined" fera l'affaire. Il en va de même pour les liens vers '#'.

Dans IE6, les balises d'ancrage sans href ne se voient pas appliquer le style a:hover.

Oui, c'est terrible et c'est un petit crime contre l'humanité, mais c'est aussi le cas d'IE6 en général.

J'espère que cela vous aidera.

EDIT : IE6 est en fait un crime majeur contre l'humanité.

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