Question

J'avais l'impression qu'il me suffisait de spécifier le "protocole" lors de l'utilisation de JavaScript dans les attributs d'URL, comme dans hrefs.Est-ce le seul contexte « utile » pour javascript:?

Sensible:

<a href="javascript:alert('Hello')">World!</a>

Idiot:

<form onsubmit="javascript:alert('oops!')">

Est-ce correct?Ou y a-t-il un bug/cas d'utilisation obscur dont je dois être conscient ?

Était-ce utile?

La solution

Le javascript: le pseudo-protocole sur les gestionnaires d'événements sera seulement ignoré, vous n'en avez pas besoin, le moteur JavaScript interprétera javascript: comme un Déclaration de l'étiquette.

Une étiquette fournit simplement un identifiant à une instruction et vous permet d'y faire référence ailleurs dans votre programme.

À mon humble avis, ce pseudo-protocole n'est utile que pour les bookmarklets...

Article recommandé :

Autres conseils

Comme d'autres réponses l'ont mentionné, évitez d'utiliser javascript: href liens, et c'est totalement inutile dans les attributs du gestionnaire d'événements.Cependant, puisque A les balises sont parfois encore sémantiquement correctes, vous devrez mettre quelque chose dans le href attribut si vous voulez votre :link et :hover Styles CSS à appliquer à l'élément dans Internet Explorer.Dans ce cas, utilisez :

<a href="#" onclick="doSomething(); return false;">Link</a>

Ou

<a href="javascript://" onclick="doSomething();">Link</a>

Il y a un bug (quelque peu obscur) avec le javascript protocole - dans Internet Explorer*, il pensera que vous quittez la page lorsque vous cliquez sur le lien.Si vous utilisez window.onbeforeunload, votre message de navigation apparaîtra à ce moment-là.Pour cette seule raison, nous avons arrêté d'utiliser le javascript protocole complètement afin que ce bug n'apparaisse pas parce que nous avons oublié de le vérifier lorsque nous ajoutons un message de navigation à une page.


* J'aurais probablement dû spécifier la version lorsque j'ai écrit ceci pour la première fois.Je ne m'en souviens pas du tout, mais juste au cas où le bug ne serait présent que dans un navigateur aujourd'hui pour la plupart disparu comme IE 6 ou 7, il est probablement préférable de le tester vous-même.

Ne le précisez jamais du tout.C'est mal de le faire <a> balises, qui devraient plutôt être codées comme ceci :

<a href='#' onclick='alert("Hello")'>World</a>

C'est un vestige des jours passés.La seule fois où je peux penser à l'endroit où il est utilisé serait dans la barre d'adresse du navigateur (et dans les signets du bookmarklet).Gardez-le hors de vos pages.

En pratique, vous avez raison.

Vous devez le faire dans tous les cas où quelque chose d'autre qu'un script est attendu.En théorie, vous pouvez vous en tenir javascript:whatever partout où vous pouvez utiliser une URL, mais cela n'a jamais été pris en charge et son utilisation est désormais officiellement déconseillée.

Cependant, tu ne devrais vraiment pas utiliser javascript: du tout.Pour les liens, vous pouvez utiliser le onclick attribut.Ce qui se passe réellement de nos jours, c'est que le moteur JavaScript identifie javascript: comme étiquette, c'est pourquoi le code s'exécute.

Vous devriez tous vérifierhttp://bytes.com/topic/javascript/answers/504856-javascript-pseudo-protocol-event-handlersSurtout le message de "Lasse Reichstein Nielsen", car la plupart des réponses ici sont incorrectes d'une manière ou d'une autre.

N'oubliez pas non plus que la balise d'ancrage ne nécessite pas du tout de href !C'est<a>hi</a> est un xhtml valide.Le problème d'utilisation href="#" c'est qu'il peut défiler vers le haut de la page.ce n’est tout simplement pas nécessaire.Enfin, si vous ne souhaitez pas réellement le comportement de la balise d'ancrage, vous ne devez pas l'utiliser.Vous pouvez simuler une ancre en utilisant CSS (cursor:pointer) et des événements comme mouseenter et mouseleave (ce qui demande plus de travail, mais ne "casse" pas le comportement attendu d'une balise d'ancrage).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top