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


228

J'ai vu le href suivant utilisé de temps en temps dans les pages Web. Cependant, je ne comprends pas ce que cela tente de faire ou la technique. Quelqu'un peut-il élaborer s'il vous plaît?

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

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

1
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 éviter cela car il est laid, inaccessible et a amené les gens à utiliser le javascript:schéma là où il ne devrait pas être utilisé ( onclick="javascript:…")
Gareth

Réponses:


247

Un <a>élément n'est pas du code HTML valide sauf s'il possède un attribut hrefou name.

Si vous souhaitez qu'il s'affiche correctement sous forme de lien (c'est-à-dire souligné, pointeur manuel, etc.), il ne le fera que s'il possède un hrefattribut.

Un code comme celui-ci est donc parfois utilisé comme moyen de créer un lien, mais sans avoir à fournir une URL réelle dans l' hrefattribut. Le développeur voulait évidemment que le lien lui-même ne fasse rien, et c'était la manière la 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 ce sera ce qu'il veut réellement se produire, mais il veut qu'il ressemble à un <a>lien de balise normal .

Certains développeurs l'utilisent href='#'dans le même but, mais cela fait que le navigateur saute en haut de la page, ce qui peut ne pas être souhaité. Et il ne pouvait pas simplement laisser le href vide, car il href=''s'agit d'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. Utiliser un bit vide de code Javascript dans le hrefest l'un d'entre eux, et bien que ce ne soit pas la meilleure solution, cela fonctionne.


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

28
il est préférable de le faire si la fonction d'événement le fait return false;ou event.preventDefault()alors l' hrefaction ne sera jamais appelée, vous pouvez donc y mettre quelque chose de plus sensé.
Spudley

6
Un <a>sans hrefou namen'est pas invalide; cela peut être facilement vérifié à l'aide d'un validateur.
Jukka K. Korpela

2
Le fragment (section #) ne doit jamais être envoyé au serveur Web selon les spécifications, donc il y a des chances que votre navigateur fasse quelque chose de mal là-bas.
Joshua Walsh

2
Oui à ce que @YoshieMaster a dit. Si l'URL a un # fragment , celui-ci n'est jamais envoyé au serveur Web (ou, par conséquent, au pare-feu); il n'est utilisé qu'en interne par le navigateur. Dans ce cas, le fait de cliquer sur un lien balisé avec <a href="#">... </a>n'entraînera pas l'envoi de requêtes HTTP par votre navigateur; il suffit de faire défiler vers le haut de la page.
Mark Reed

38

Fondamentalement, au lieu d'utiliser le lien pour déplacer des pages (ou des ancres), l'utilisation de cette méthode lance une ou plusieurs fonctions javascript

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

cliquer sur le lien déclenchera l'alerte.


31

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"où se #notrouve une ancre non définie dans le document.

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

Avantages de l'approche:

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

Désavantages:

  • Vous devez vous assurer que le nom de l'ancre n'est pas utilisé dans le document.

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


13
J'aime aussi l'ancre non définie. Cependant, un autre inconvénient est qu'il ajoute l'ancre à l'historique de votre navigateur, donc j'ai choisi d'utiliser la méthode JS vierge dans l'OP.
John Reid

10
<a href="javascript:alert('Hello');"></a>

est juste un raccourci pour:

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

3
En quelque sorte, mais ce n'est pas une vraie comparaison "à l'identique". C'est une raison pour laquelle certains tombent dans le piège de l'utiliser en premier lieu.
Lankymart

9

C'est une façon de faire en sorte qu'un lien ne fasse absolument rien lorsqu'il est cliqué (sauf si des événements Javascript lui sont 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 réellement de javascript à exécuter (comme votre exemple), il ne fait rien.


Ah, je vois. Il désactive efficacement le lien.
John Livermore

9

Référez-vous à ceci:

<a href="Http://WWW.stackoverflow.com">Link to the website opened in different tab</a>
<a href="#MyDive">Link to the div in the page(look at the chaneged url)</a>
<a href="javascript:;">Nothing happens if there is no javaScript to render</a>

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

javascript: indique au navigateur qu'il va écrire du code javascript


3

Ancien thread, mais je pensais simplement ajouter que la raison pour laquelle les développeurs utilisent cette construction n'est pas de créer un lien mort, mais parce que les URL javascript ne transmettent pas correctement les références à l'élément html actif.

par exemple handler_function(this.id)fonctionne comme onClickmais pas comme une URL javascript.

Ainsi, c'est un choix entre écrire du code conforme aux normes pédantiquement qui vous oblige à ajuster manuellement l'appel pour chaque lien hypertexte, ou un code légèrement non standard qui peut être écrit une fois et utilisé partout.


2

Il est donc utilisé pour écrire des codes js à l'intérieur hrefau lieu d'écouteurs d'événements comme onclicket en évitant les #liens hrefpour rendre les abalises valides en html.

J'ai eu une recherche sur la façon d'utiliser l' javascript:intérieur de l' hrefattribut.

<a href="
     javascript:
        a = 4;
        console.log(a++); 
        a += 2; 
        console.log(a++); 
        if(a < 6){ 
            console.log('a is lower than 6');
        } 
        else 
            console.log('a is greater than 6');
        function log(s){
            console.log(s);
        }
        log('function inplimentation working too');

">Click here</a>

Grâce à ce code, vous pouvez même y écrire des codes js au lieu d'appeler uniquement des fonctions.


Testé en version Chrome 68.0.3440.106 (version officielle) (64 bits)

Testé dans Firefox Quantom 61.0.1 (64 bits)


-4

La meilleure façon de toujours rendre un lien correctement est avec le CSS comme suit:

a {cursor: pointer !important}

Il faut éviter de suivre des choses inutiles comme mentionné dans le fil.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.