<a href="javascript:void(0)" id="loginlink">login</a>
J'ai vu tant href
de fois, mais je ne sais pas exactement ce que cela signifie.
javascript
void
OMG
la source
la source
javascript:
est l'un des nombreux schémas d'URI: en.wikipedia.org/wiki/URI_scheme , commedata:
.href="javascript:"
dans le même but. Comme indiqué dans la réponse à cette question , lavoid(0)
partie était à l'origine destinée aux premières versions de navigateurs où lajavascript:
gestion des URI était différente. Mais maintenant, je ne pouvais même pas trouver une version où la sténographie ne fonctionnerait pas, au moins IE7 gère cela correctement.Réponses:
Une explication est fournie ici:
void
opérateur .La raison pour laquelle vous souhaitez le faire avec
href
un lien est que normalement, unejavascript:
URL redirige le navigateur vers une version en texte brut du résultat de l'évaluation de ce JavaScript. Mais si le résultat estundefined
, le navigateur reste sur la même page.void(0)
est juste un script court et simple à évaluerundefined
.la source
En plus de la réponse technique,
javascript:void
signifie que l'auteur se trompe.Il n'y a aucune bonne raison d'utiliser une
javascript:
pseudo-URL (*). En pratique, cela causera de la confusion ou des erreurs si quelqu'un essaie des choses comme «lien de signet», «ouvrir le lien dans un nouvel onglet», etc. Cela se produit beaucoup maintenant, les gens se sont habitués au clic du milieu pour un 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 donne des résultats indésirables comme une page vierge ou une erreur JS lorsque vous cliquez avec le bouton central.<a href="#">
est une alternative courante qui pourrait sans doute être moins mauvaise. Cependant, vous devez vous souvenirreturn false
de votreonclick
gestionnaire d'événements pour empêcher le lien d'être suivi et de défiler vers le haut de la page.Dans certains cas, il peut y avoir un endroit réellement utile pour pointer le lien. Par exemple, si vous avez un contrôle sur lequel vous pouvez cliquer pour ouvrir un élément précédemment masqué
<div id="foo">
, il est judicieux d'utiliser un<a href="#foo">
lien vers celui-ci. Ou s'il existe une manière non JavaScript de faire la même chose (par exemple, 'thispage.php? Show = foo' qui définit foo visible pour commencer), vous pouvez créer un lien vers cela.Sinon, si un lien pointe uniquement vers un script, ce n'est pas vraiment un lien et ne doit pas être marqué comme tel. L'approche habituelle serait d'ajouter le
onclick
à un<span>
,<div>
ou un<a>
sans unhref
et de le styliser d'une certaine manière pour qu'il soit clair que vous pouvez cliquer dessus. C'est ce que StackOverflow [a fait au moment de la rédaction; maintenant il utilisehref="#"
].L'inconvénient est que vous perdez le contrôle du clavier, car vous ne pouvez pas taper sur un span / div / bare-a ou l'activer avec de l'espace. Que ce soit réellement un inconvénient dépend du type d'action que l'élément est censé entreprendre. Vous pouvez, avec un certain effort, essayer d'imiter l'interactivité du clavier en ajoutant un
tabIndex
à l'élément et en écoutant une pression sur l'espace. Mais il ne reproduira jamais à 100% le comportement réel du navigateur, notamment parce que différents navigateurs peuvent répondre différemment au clavier (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 est un
<button type="button">
(ou<input type="button">
tout aussi bon, pour un contenu textuel simple). Vous pouvez toujours utiliser CSS pour le recomposer afin qu'il ressemble plus à un lien qu'à un bouton, si vous voulez. Mais comme il se comporte comme un bouton, c'est comme ça qu'il faut vraiment le marquer.(*: dans la création de sites, de toute façon. De toute évidence, ils sont utiles pour les bookmarklets. Les
javascript:
pseudo-URL sont une bizarrerie conceptuelle: un localisateur qui ne pointe pas vers un emplacement, mais appelle plutôt du code actif à l'intérieur de l'emplacement actuel. Ils ont provoqué une sécurité massive problèmes pour les navigateurs et les applications Web, et n'aurait jamais dû être inventé par Netscape.)la source
href
, y compris les bizarreries et les effets secondaires; certains d'entre vous pourraient trouver cela utile: jakub-g.github.com/accessibility/onclickvoid(0)
est nécessaire dans de nombreux cas; "#" est un hack qui apporte une multitude de problèmes (cela ne fonctionnerait pas dans l'application que j'écris, qui m'a amené à cette page).preventDefault
est utilisée. Veuillez ne pas le faire dans le cas où une ancre est utilisée comme bouton sur un formulaire.Cela signifie que cela ne fera rien. C'est une tentative pour que le lien ne «navigue» nulle part. Mais ce n'est pas la bonne façon.
Vous devriez en fait juste
return false
dans l'onclick
événement, comme ceci:En règle générale, il est utilisé si le lien fait quelque chose de «JavaScript-y». Comme publier un formulaire AJAX, ou échanger une image, ou autre chose. Dans ce cas, vous effectuez simplement la fonction appelée Return
false
.Pour rendre votre site Web complètement génial, cependant, vous incluerez généralement un lien qui fait la même action, si la personne qui le visite choisit de ne pas exécuter JavaScript.
la source
<a href="enableJavaScriptToSeeMyCompletelyAwesomeSite.html" onclick="completelyAwesome();return false;">
.Il y a une énorme différence dans le comportement de "#" vs javascript: void
"#" vous fait défiler vers le haut de la page tandis que "javascript: void (0);" ne fait pas.
Ceci est très important si vous codez des pages dynamiques. l'utilisateur ne veut pas revenir en haut simplement parce qu'il a cliqué sur un lien sur la page.
la source
false
au gestionnaire d'événements:,onclick="doSomething();return false;"
ou s'ildoSomething()
revientfalse
, vous pouvez utiliseronclick="return doSomething();"
.e.preventDefault()
."#"
ne défile pas vers le haut lorsque vous retournez false.Il s'agit d'une méthode très populaire pour ajouter des fonctions JavaScript aux liens HTML.
Par exemple: les
[Print]
liens que vous voyez sur de nombreuses pages Web sont écrits comme ceci:Pourquoi avons-nous besoin
href
alors queonclick
seuls peuvent faire le travail? Parce que lorsque les utilisateurs survolent le texte «Imprimer» alors qu'il n'y en a pashref
, le curseur se transforme en signe d'insertion (ꕯ) au lieu d'un pointeur (👆). Seul le fait d'avoirhref
sur una
tag le valide en tant que lien hypertexte.Une alternative à
href="javascript:void(0);"
, est l'utilisation dehref="#"
. Cette alternative ne nécessite pas d'activer JavaScript dans le navigateur de l'utilisateur, elle est donc plus compatible.la source
href
d'obtenir le curseur de la main pointée; il suffit d'un peu de CSS.<a href="javascript:callPrintFunction()">
c'est plus propre (bien que cela devrait probablement être unbutton
plutôt qu'una
nchor s'il ne vous emmène réellement nulle part).href="#"
peut entraîner de mauvaises surprises - comme les demandes xhr avortées, qui se trouvent être appelées en cliquant sur ce lien. J'ai récemment eu du mal à déboguer un site Web qui avait abandonné la connexion oidc demandée, si l'utilisateur se trouvait à une adresse qui n'était pas la racine du site.#
href l'a obligé à recharger l'adresse avant que la requête xhr ne soit terminée.Vous devriez toujours avoir un href sur vos un tags. Appeler une fonction JavaScript qui renvoie 'non défini' fera l'affaire. Il en sera de même pour le lien vers «#».
Les balises d'ancrage dans Internet Explorer 6 sans href n'obtiennent pas le
a:hover
style appliqué.Oui, c'est terrible et un crime mineur contre l'humanité, mais encore une fois, Internet Explorer 6 en général l'est aussi.
J'espère que ça aide.
Internet Explorer 6 est en fait un crime majeur contre l'humanité.
la source
Il convient de mentionner que vous verrez parfois void 0 lors de la vérification d'undefined, simplement parce qu'il nécessite moins de caractères.
Par exemple:
contre.
Certaines méthodes de minification remplacent undefined par void 0 pour cette raison.
la source
void 0
. La différence de 3 caractères s'additionne rapidement lorsque de nombreuses méthodes utilisent des valeurs de paramètres par défaut.L'utilisation de
javascript:void(0)
signifie que l'auteur du code HTML utilise abusivement l'élément d'ancrage à la place de l'élément bouton.Source: page de MDN
<a>
.la source
void
est un opérateur utilisé pour renvoyer uneundefined
valeur afin que le navigateur ne puisse pas charger une nouvelle page.Les navigateurs Web essaieront de prendre tout ce qui est utilisé comme URL et le chargeront à moins que ce soit une fonction JavaScript qui renvoie null. Par exemple, si nous cliquons sur un lien comme celui-ci:
alors un message d'alerte apparaîtra sans charger une nouvelle page, et c'est parce que
alert
c'est une fonction qui renvoie une valeur nulle. Cela signifie que lorsque le navigateur tente de charger une nouvelle page, il voit null et n'a rien à charger.Une chose importante à noter à propos de l'opérateur void est qu'il nécessite une valeur et ne peut pas être utilisé seul. Nous devons l'utiliser comme ceci:
la source
Pour comprendre ce concept, il faut d'abord comprendre l'opérateur void en JavaScript.
La syntaxe de l'opérateur void est:
void «expr»
qui évalue expr et renvoie undefined.Si vous implémentez void en tant que fonction, cela ressemble à ceci:
Cet opérateur void a une utilisation importante qui est - la suppression du résultat d'une expression.
Dans certaines situations, il est important de renvoyer undefined par opposition au résultat d'une expression. Ensuite, void peut être utilisé pour rejeter ce résultat. Une telle situation implique des URL javascript: qui devraient être évitées pour les liens, mais qui sont utiles pour les bookmarklets. Lorsque vous visitez l'une de ces URL, de nombreux navigateurs remplacent le document actuel par le résultat de l'évaluation du «contenu» des URL, mais uniquement si le résultat n'est pas indéfini. Par conséquent, si vous souhaitez ouvrir une nouvelle fenêtre sans modifier le contenu actuellement affiché, vous pouvez effectuer les opérations suivantes:
la source
function myVoid(expr) { expr(); return undefined; }
Vous avez oublié d'ajouter expr ();expr
est déjà évalué lorsqu'il estmyVoid()
appelé (le résultat de cette expression est passé en paramètre)function() { alert("foo"); }
est une expression valide .void(function() { alert("foo"); })
renvoieundefined
et n'affiche pas l'alerte, alorsmyVoid(function() { alert("foo"); })
que (dans votre version, pas celle de Gopal Yadav ).L'
void
opérateur évalue l'expression donnée, puis renvoie undefined. Cela évite de rafraîchir la page.la source
Les développeurs Web l'utilisent
javascript:void(0)
car c'est le moyen le plus simple d'empêcher le comportement par défaut desa
balises.void(*anything*)
renvoieundefined
et c'est une valeur falsifiée. et renvoyer une valeur falsifiée est commereturn false
enonclick
cas dea
balise qui empêche son comportement par défaut.Je pense donc que
javascript:void(0)
c'est le moyen le plus simple d'empêcher le comportement par défaut dua
tag.la source
Un lien doit avoir une cible HREF à spécifier pour lui permettre d'être un objet d'affichage utilisable.
La plupart des navigateurs n'analyseront pas le JavaScript avancé dans un
balise telle que:
car la balise HREF dans la plupart des navigateurs n'autorise pas les espaces, ou convertira les espaces en% 20, l'équivalent HEX d'un ESPACE, ce qui rend votre JavaScript absolument inutile à l'interpréteur.
Donc, si vous souhaitez utiliser une balise A HREF pour exécuter JavaScript en ligne, vous devez spécifier une valeur valide pour HREF FIRST qui n'est pas trop complexe (ne contient pas d'espaces), puis fournir le JavaScript dans une balise d'attribut d'événement comme OnClick , OnMouseOver, OnMouseOut, etc.
La réponse typique est de faire quelque chose comme ceci:
Cela fonctionne bien, mais cela fait sauter la page vers le haut en raison du signe dièse / la balise de hachage lui dit de le faire.
Le simple fait de fournir un signe dièse / une balise de hachage dans une balise A HREF spécifie en fait l'ancrage racine, qui est toujours, par défaut, le haut de la page, vous pouvez spécifier un emplacement différent en utilisant la spécification de l'attribut NAME à l'intérieur d'une balise A HREF.
Vous pouvez ensuite modifier votre balise A HREF pour passer à «middleofpage» et exécuter le JavaScript dans l'événement OnClick, une fois que cela se produit comme suit:
Il y aura BEAUCOUP de fois où vous ne voulez pas que ce lien saute, vous pouvez donc faire deux choses:
Maintenant, il n'ira nulle part lorsque vous cliquerez dessus, mais cela pourrait entraîner un recentrage de la page à partir de sa fenêtre actuelle. Ce n'est pas joli. Quelle est la meilleure façon de fournir du javascript en ligne, en utilisant un A HREF, mais sans avoir à faire quoi que ce soit ci-dessus? JavaScript: void (0);
Cela indique au navigateur d'aller NULLE PART, mais d'exécuter à la place le code JavaScript valide: void (0); fonctionne d'abord dans la balise HREF car elle ne contient aucun espace et ne sera pas analysée en tant qu'URL. Il sera plutôt exécuté par le compilateur. VOID est un mot clé qui, lorsqu'il est fourni avec un périmètre de 0, renvoie UNDEFINED, qui n'utilise plus de ressources pour gérer une valeur de retour qui se produirait sans spécifier le 0 (il est plus convivial pour la gestion de la mémoire / les performances).
La prochaine chose qui se produit est l'exécution d'OnClick. La page ne bouge pas, rien ne se passe au niveau de l'affichage.
la source
<a>
élément doit toujours aller quelque part ; si c'est uniquement sur la page pour exécuter du javascript, alors a<button>
devrait être utilisé à la place. L'utilisation<button>
est à la fois plus sémantique et vous évite tout ce débat sur ce qu'il faut pirater dans une ancrehref
. Edit: ressemble à la réponse de @Ronnie Royston ci-dessous a déjà couvert cet argument.JavaScript: URL à part; c'est là que void peut être utile pour écrire du code plus court.
la source