Je veux exécuter une fonction JavaScript simple sur un clic sans aucune redirection.
Existe-t-il une différence ou un avantage entre le fait d'appeler l'appel JavaScript dans l' href
attribut (comme ceci:
<a href="javascript:my_function();window.print();">....</a>
) vs le mettre dans l' onclick
attribut (le lier à l' onclick
événement)?
javascript
href
SkunkSpinner
la source
la source
Réponses:
Mettre le onclick dans le href offenserait ceux qui croient fortement en la séparation du contenu du comportement / action. L'argument est que votre contenu html doit rester concentré uniquement sur le contenu, pas sur la présentation ou le comportement.
De nos jours, le chemin type consiste à utiliser une bibliothèque javascript (par exemple jquery) et à créer un gestionnaire d'événements à l'aide de cette bibliothèque. Cela ressemblerait à quelque chose comme:
la source
href
et en ligneonclick
? En supposant que vous alliez le mettre en ligne pour une raison quelconque, laquelle devriez-vous utiliser? (En pratique, je ferais ce que vous avez suggéré, mais vous semblez avoir ignoré la différence entre les deux attributs.)mauvais:
bien:
meilleur:
encore mieux 1:
encore mieux 2:
Pourquoi mieux? parce que
return false
cela empêchera le navigateur de suivre le lienmeilleur:
Utilisez jQuery ou un autre framework similaire pour attacher le gestionnaire onclick par l'ID de l'élément.
la source
href
n'est pas réglé sur#
mais vers un lien réel pour les navigateurs noJS.En termes de javascript , une différence est que le
this
mot - clé dans leonclick
gestionnaire fera référence à l'élément DOM dontonclick
il est l'attribut (dans ce cas l'<a>
élément), tandis quethis
dans l'href
attribut fera référence à l'window
objet.En termes de présentation , si un
href
attribut est absent d'un lien (c.-à-d.<a onclick="[...]">
), Par défaut, les navigateurs afficheront letext
curseur (et non lepointer
curseur souvent souhaité ) car il traite le<a>
comme une ancre, et non un lien.En termes de comportement , lors de la spécification d'une action par navigation via
href
, le navigateur prend généralement en charge l'ouverture de celle-cihref
dans une fenêtre séparée à l'aide d'un raccourci ou d'un menu contextuel. Cela n'est pas possible lorsque vous spécifiez une action uniquement viaonclick
.Cependant, si vous demandez quelle est la meilleure façon d'obtenir une action dynamique à partir du clic d'un objet DOM, attacher un événement en utilisant javascript séparé du contenu du document est la meilleure façon de procéder. Vous pouvez le faire de plusieurs façons. Une façon courante consiste à utiliser une bibliothèque javascript comme jQuery pour lier un événement:
la source
j'utilise
Un long chemin, mais il fait le travail. utiliser un style A pour simplifier alors il devient:
la source
nohref
attribut auparavant. C'est la façon la plus logique / élégante de gérer de telles actions javascript. Ceci est compatible avec FF12 et IE8. Par conséquent, je remplacerai tous meshref="JavaScript:void(0);"
parnohref
. Merci beaucoup. À votre santé.nohref
fait partie duarea
tag, nona
! Votre exemple est le même que<a onClick="alert('Hello World')">HERE</a>
nohref
n'existe pas sur unea
balise.En plus de tout ici, le href est affiché dans la barre d'état du navigateur, et onclick pas. Je pense que ce n'est pas convivial pour y afficher du code javascript.
la source
la meilleure façon de le faire est de:
Le problème est que cela ajoutera un hachage (#) à la fin de l'URL de la page dans le navigateur, obligeant ainsi l'utilisateur à cliquer deux fois sur le bouton de retour pour accéder à la page avant la vôtre. Compte tenu de cela, vous devez ajouter du code pour arrêter la propagation des événements. La plupart des boîtes à outils javascript auront déjà une fonction pour cela. Par exemple, la boîte à outils dojo utilise
faire cela.
la source
href="#"
le navigateur, il recherchera une balise d'ancrage nommée et qu'il ne la trouvera pas, cela fera défiler la fenêtre vers le haut de la page, ce qui pourrait ne pas être perceptible si vous êtes déjà au sommet. Pour éviter ce comportement, utilisez: à lahref="javascript:;"
place.La meilleure réponse est une très mauvaise pratique, il ne faut jamais créer de lien vers un hachage vide car cela peut créer des problèmes en cours de route.
Le mieux est de lier un gestionnaire d'événements à l'élément, comme l'ont déclaré de nombreuses autres personnes,
<a href="javascript:doStuff();">do stuff</a>
fonctionne parfaitement dans tous les navigateurs modernes, et je l'utilise largement lors du rendu des modèles pour éviter d'avoir à se lier à nouveau pour chaque instance. Dans certains cas, cette approche offre de meilleures performances. YMMVUn autre petit morceau intéressant ....
onclick
&href
ont des comportements différents lors de l'appel direct de javascript.onclick
passera lethis
contexte correctement, alors quehref
ne le fera pas, ou en d'autres termes<a href="javascript:doStuff(this)">no context</a>
ne fonctionnera pas, alors que<a onclick="javascript:doStuff(this)">no context</a>
fera.Oui, j'ai omis le
href
. Bien que cela ne respecte pas les spécifications, cela fonctionnera dans tous les navigateurs, bien que, idéalement, il devrait inclure unehref="javascript:void(0);"
bonne mesurela source
Ayant
javascript:
un attribut qui n'est pas spécifiquement destiné aux scripts est une méthode HTML obsolète. Bien que cela fonctionne techniquement, vous attribuez toujours des propriétés javascript à un attribut non script, ce qui n'est pas une bonne pratique. Il peut même échouer sur les anciens navigateurs, ou même sur certains navigateurs modernes (un post googlé sur le forum semble indiquer que Opera n'aime pas les URL 'javascript:').Une meilleure pratique serait la deuxième façon, de mettre votre javascript dans l'
onclick
attribut, qui est ignoré si aucune fonctionnalité de script n'est disponible. Placez une URL valide dans le champ href (généralement «#») pour le remplacement pour ceux qui n'ont pas de javascript.la source
cela a fonctionné pour moi en utilisant cette ligne de code:
la source
Cela marche
la source
Personnellement, je trouve ennuyeux de placer des appels javascript dans la balise HREF. Habituellement, je ne fais pas vraiment attention à savoir si quelque chose est un lien javascript ou non, et souvent je veux ouvrir des choses dans une nouvelle fenêtre. Lorsque j'essaie de le faire avec l'un de ces types de liens, j'obtiens une page vierge sans rien et javascript dans ma barre d'emplacement. Cependant, cela est un peu contourné en utilisant un onlick.
la source
Encore une chose que j'ai remarquée en utilisant "href" avec javascript:
Le script dans l'attribut "href" ne sera pas exécuté si la différence de temps entre 2 clics était assez courte.
Par exemple, essayez d'exécuter l'exemple suivant et double-cliquez (rapidement!) Sur chaque lien. Le premier lien ne sera exécuté qu'une seule fois. Le deuxième lien sera exécuté deux fois.
Reproduit en Chrome (double clic) et IE11 (avec triple clic). Dans Chrome, si vous cliquez assez rapidement, vous pouvez effectuer 10 clics et exécuter une seule fonction.
Firefox fonctionne bien.
la source
Tout d'abord, il
href
est préférable d' avoir l'URL car elle permet aux utilisateurs de copier des liens, de les ouvrir dans un autre onglet, etc.Dans certains cas (par exemple, les sites avec des modifications HTML fréquentes), il n'est pas pratique de lier des liens à chaque mise à jour.
Méthode de liaison typique
Lien normal:
Et quelque chose comme ça pour JS:
Les avantages de cette méthode sont une séparation nette du balisage et du comportement et n'ont pas à répéter les appels de fonction dans chaque lien.
Aucune méthode de liaison
Si vous ne voulez pas lier à chaque fois, cependant, vous pouvez utiliser onclick et passer l'élément et l'événement, par exemple:
Et cela pour JS:
L'avantage de cette méthode est que vous pouvez charger de nouveaux liens (par exemple via AJAX) quand vous le souhaitez sans avoir à vous soucier de la liaison à chaque fois.
la source
la source
J'ai constaté que javascript: hrefs ne fonctionnait pas lorsque la page était incorporée dans la fonctionnalité de page Web d'Outlook où un dossier de messagerie est configuré pour afficher à la place une URL
la source