254 votes

Que fait l'expression href <a href="javascript: ;"></a> ?

J'ai vu le href suivant utilisé dans des pages web de temps en temps. Cependant, je ne comprends pas ce que cela tente de faire ni la technique. Quelqu'un peut-il m'expliquer ?

<a href="javascript:;"></a>

2 votes

Vous pouvez appeler une méthode JS avec ceci si je ne me trompe pas javascript:SomeFunction()

2 votes

Il n'essaie pas de faire quoi que ce soit qui ne puisse pas être mieux géré avec un gestionnaire de clics approprié. Vous devriez l'éviter parce qu'il est laid, inaccessible et qu'il a incité les gens à utiliser la fonction javascript: où il ne devrait pas être utilisé ( onclick="javascript:…" )

2 votes

283voto

Spudley Points 85371

Un site <a> est un élément HTML invalide, à moins qu'il ne comporte un élément href o name attribut.

Si vous voulez qu'il soit rendu correctement en tant que lien (c'est-à-dire souligné, pointeur de la main, etc.), il ne le fera que s'il possède une balise href attribut.

Un code de ce type est donc parfois utilisé comme un moyen de créer un lien, mais sans avoir à fournir une URL réelle dans la balise href attribut. Le développeur voulait évidemment que le lien lui-même ne fasse rien, et c'était le moyen le plus simple qu'il connaissait.

Il a probablement un code d'événement javascript ailleurs qui est déclenché lorsque le lien est cliqué, et c'est ce qu'il veut qu'il se produise réellement, mais il veut que cela ressemble à un événement normal. <a> lien avec le tag.

Certains développeurs utilisent href='#' dans le même but, mais cela fait sauter le navigateur en haut de la page, ce qui n'est pas forcément souhaité. Et il ne pouvait pas simplement laisser le href vide, parce que href='' est un lien vers la page actuelle (c'est-à-dire qu'il provoque un rafraîchissement de la page).

Il y a des moyens de contourner ces choses. L'utilisation d'un bout de code Javascript vide dans le href est l'une d'entre elles, et bien qu'elle ne soit pas la meilleure solution, elle fonctionne.

18 votes

Par curiosité, existe-t-il une meilleure façon de procéder ?

33 votes

Une meilleure façon de procéder est de faire en sorte que la fonction événement fasse return false; o event.preventDefault() alors le href ne sera jamais appelée, vous pouvez donc y mettre quelque chose de plus raisonnable.

6 votes

Un site <a> sans href o name n'est pas invalide ; cela peut être facilement vérifié à l'aide d'un validateur.

44voto

Eonasdan Points 3788

En fait, au lieu d'utiliser le lien pour déplacer les pages (ou les ancres), cette méthode permet de lancer une ou plusieurs fonctions javascript.

<script>
function doSomething() {
  alert("hello")
}
</script>
<a href="javascript:doSomething();">click me</a>

En cliquant sur le lien, l'alerte sera déclenchée.

33voto

Pau Giner Points 801

Il existe plusieurs mécanismes pour éviter qu'un lien n'atteigne sa destination. Celui de la question n'est pas très intuitif.

Une option plus propre consiste à utiliser href="#no"#no est une ancre non définie dans le document.

Vous pouvez utiliser un nom plus sémantique comme #disable, ou #action pour augmenter la lisibilité.

Avantages de l'approche :

  • Évite l'effet de "déplacement vers le haut" du href="#" vide.
  • Évite l'utilisation de javascript

Inconvénients :

  • Vous devez vous assurer que le nom de l'ancre n'est pas utilisé dans le document.
  • L'URL est modifiée pour inclure l'ancre (inexistante) comme fragment et une nouvelle entrée de l'historique du navigateur est créée. Cela signifie que le fait de cliquer sur le bouton "retour" après avoir cliqué sur le lien ne se comportera pas comme prévu.

Depuis le <a> n'agit pas comme un lien, la meilleure option dans ces cas n'est pas d'utiliser un élément <a> mais un élément <div> et fournir le style de lien souhaité.

15 votes

J'aime aussi l'ancre non définie. Cependant, un autre inconvénient est qu'elle ajoute l'ancre à l'historique de votre navigateur, c'est pourquoi j'ai choisi d'utiliser la méthode du JS vierge dans le PO.

11voto

bjornd Points 11457
<a href="javascript:alert('Hello');"></a>

est juste un raccourci pour :

<a href="" onclick="alert('Hello'); return false;"></a>

4 votes

En quelque sorte, mais il ne s'agit pas d'une véritable comparaison "à l'identique". C'est la raison pour laquelle certains tombent dans le piège de l'utiliser en premier lieu.

10voto

Daan Wilmer Points 380

C'est un moyen de faire en sorte qu'un lien ne fasse absolument rien lorsqu'il est cliqué (à moins que des événements Javascript ne lui soient liés).

C'est une façon d'exécuter Javascript au lieu de suivre un lien :

<a href="Javascript: doStuff();">link</a>

Lorsqu'il n'y a pas de javascript à exécuter (comme dans votre exemple), il ne fait rien.

0 votes

Ah, je vois. Cela désactive effectivement le lien.

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