J'utilise actuellement des <a>
balises avec jQuery pour lancer des choses comme des événements de clic, etc.
L'exemple est <a href="#" class="someclass">Text</a>
Mais je déteste la façon dont le «#» fait sauter la page en haut de la page. Que puis-je faire à la place?
javascript
jquery
html
st4ck0v3rfl0w
la source
la source
Réponses:
Dans jQuery, lorsque vous gérez l'événement click,
renvoie false pour empêcher le lien de répondre de la manière habituelleempêcher l'action par défaut, qui est de visiter l'href
attribut, d'avoir lieu (selon le commentaire de PoweRoy et la réponse d'Erik ):la source
$('a[href=#]').click(function(e) { e.preventDefault(); });
Donc c'est vieux mais ... juste au cas où quelqu'un trouverait ça dans une recherche.
Utilisez simplement
"#/"
au lieu de"#"
et la page ne sautera pas.la source
/
, et non parce qu'il#/
a une signification. vous pouvez faire la même chose avec#whateveryouwant
et cela empêchera un saut vers le haut#/
ou quoi que ce soit d'autre, par exemple#whatever
.vous pouvez même l'écrire comme ceci:
je ne suis pas sûr que c'est une meilleure façon mais c'est une façon :)
la source
href='javascript:;'
mais attention il déclenche l'événement window.beforeUnload dans IESolution # 1: (simple)
Solution n ° 2: (nécessaire
javascript
)Solution n ° 3: (nécessaire
jQuery
)la source
Vous pouvez utiliser
event.preventDefault()
pour éviter cela. En savoir plus ici: http://api.jquery.com/event.preventDefault/ .la source
Utilisez simplement
<input type="button" />
au lieu de<a>
et utilisez CSS pour le styliser pour ressembler à un lien si vous le souhaitez.Les boutons sont spécialement conçus pour les clics et n'ont pas besoin d'attributs href.
La meilleure façon est d'utiliser l'action onload pour créer le bouton et l'ajouter où vous en avez besoin via javascript, donc avec javascript désactivé, ils ne s'afficheront pas du tout et ne confondent pas l'utilisateur.
Lorsque vous utilisez,
href="#"
vous obtenez des tonnes de liens différents pointant vers le même emplacement, ce qui ne fonctionnera pas lorsque l'agent ne prend pas en charge JavaScript.la source
#
.Si vous souhaitez utiliser une ancre, vous pouvez utiliser http://api.jquery.com/event.preventDefault/ comme les autres réponses suggérées.
Vous pouvez également utiliser n'importe quel autre élément comme une étendue et y attacher l'événement click.
la source
Vous pouvez utiliser
#0
comme href, car0
n'est pas autorisé comme identifiant, la page ne sautera pas.la source
la source
Utilisez simplement
JQUERY
la source
Si l'élément n'a pas de valeur href significative, alors ce n'est pas vraiment un lien, alors pourquoi ne pas utiliser un autre élément à la place?
Comme suggéré par Neothor, une durée est tout aussi appropriée et, si elle est correctement conçue, elle sera visiblement évidente comme un élément sur lequel vous pouvez cliquer. Vous pouvez même attacher un événement de vol stationnaire, pour faire `` s'allumer '' l'elemnt lorsque la souris de l'utilisateur se déplace dessus.
Cependant, cela dit, vous voudrez peut-être repenser la conception de votre site pour qu'il fonctionne sans javascript, mais est amélioré par javascript lorsqu'il est disponible.
la source
Les liens avec href = "#" devraient presque toujours être remplacés par un élément bouton:
L'utilisation de liens avec href = "#" est également un problème d'accessibilité car ces liens seront visibles pour les lecteurs d'écran, qui liront "Lien - Texte" mais si l'utilisateur clique dessus, il n'ira nulle part.
la source
Vous pouvez simplement passer une balise d'ancrage sans propriété href et utiliser jQuery pour effectuer l'action requise:
<a class="foo">bar</a>
la source
#
, j'ai supposé que ce n'était pas un problème pour vous, et j'ai donc proposé cette solution car c'est probablement le moyen le plus simple de répondre à votre besoin.a:link
Les sélecteurs CSS ne cibleront pas cette balise d'ancrage.J'ai utilisé:
la source
L'
#/
astuce fonctionne, mais ajoute un événement historique au navigateur. Donc, cliquer en arrière ne fonctionne pas comme l'utilisateur peut le souhaiter / s'attendre à ce qu'il le fasse.$('body').click('a[href="#"]', function(e) {e.preventDefault() });
est la façon dont je suis allé, car cela fonctionne pour le contenu déjà existant, et tous les éléments ajoutés au DOM après le chargement.Plus précisément, je devais le faire dans un menu déroulant de démarrage à l'intérieur d'un
.btn-group
(Référence) , alors j'ai fait:$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });
De cette façon, il a été ciblé et n'a rien affecté d'autre sur la page.
la source
J'ai toujours utilisé:
lorsque vous essayez d'empêcher le saut de page. Je ne sais pas si c'est le meilleur, mais cela semble bien fonctionner depuis des années.
la source
Il existe 4 façons similaires d'empêcher la page de sauter vers le haut sans JavaScript:
Option 1:
Option 2:
Option 3:
Option 4 ( non recommandé ):
Mais il vaut mieux l'utiliser
event.preventDefault()
si vous distribuez l'événement click dans jQuery.la source
Vous pouvez également retourner false après avoir traité votre requête.
Par exemple.
la source
J'utilise quelque chose comme ça:
la source
Pour empêcher la page de sauter, vous devez appeler
e.stopPropagation();
après avoir appelée.preventDefault();
:stopPropagation
empêche l'événement de remonter dans l'arborescence DOM. Plus d'informations ici: https://api.jquery.com/event.stoppropagation/la source
Si vous souhaitez migrer vers une section d'ancrage sur la même page sans sauter de page, utilisez:
Utilisez simplement "# /" au lieu de "#" par exemple
la source
Ajouter quelque chose après
#
définit le focus de la page sur l'élément avec cet ID. La solution la plus simple consiste à utiliser#/
même si vous utilisez jQuery. Cependant, si vous gérez l'événement dans jQuery,event.preventDefault()
c'est la voie à suivre.la source
Le
<a href="#!">Link</a>
et<a href="#/">Link</a>
ne fonctionne pas si l'on doit cliquer sur la même entrée plus d'une fois .. il suffit d'un clic pour chaque événement sur plusieurs entrées.la meilleure façon de procéder est
<a href="#">Link</a>
puis,
la source