Comment empêcher un clic sur un '#' lien de sauter vers le haut de la page?

j'utilise actuellement les balises <a> avec jQuery pour initier des choses comme des évènements de clic, etc.

exemple: <a href="#" class="someclass">Text</a>

mais je déteste la façon dont le " # " fait sauter la page vers le haut de la page. Que puis-je faire à la place?

166
demandé sur Paolo Forgia 2010-07-15 09:36:30

22 réponses

dans jQuery, lorsque vous manipulez l'événement click, return false pour empêcher le lien de répondre de la manière habituelle empêcher l'action par défaut, qui est de visiter l'attribut href , d'avoir lieu (commentaire De per PoweRoy et réponse D'Erik ):

$('a.someclass').click(function(e)
{
    // Special stuff to do when this link is clicked...

    // Cancel the default action
    e.preventDefault();
});
198
répondu BoltClock 2017-05-23 11:33:26

donc c'est vieux mais... juste au cas où quelqu'un trouve ce, dans une recherche.

il suffit d'utiliser "#/" au lieu de "#" et la page ne sautera pas.

251
répondu Chris 2015-11-21 17:41:34

vous pouvez même l'écrire comme cela:

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

je ne suis pas sûr que c'est une meilleure façon, mais c'est une façon :)

52
répondu guy schaller 2010-07-15 05:47:55

Vous pouvez utiliser event.preventDefault() pour éviter cela. Lire la suite: http://api.jquery.com/event.preventDefault / .

14
répondu Erik Töyrä 2010-07-15 05:40:20

Solution #1: (plain)

<a href="#!" class="someclass">Text</a>

Solution n ° 2: (nécessaire javascript )

<a href="javascript:void(0);" class="someclass">Text</a>

Solution n ° 3: (nécessaire jQuery )

<a href="#" class="someclass">Text</a>
<script>
$('a.someclass').click(function(e) {
    e.preventDefault();
});
</script>
14
répondu Nabi K.A.Z. 2018-08-13 12:06:20

il suffit d'utiliser <input type="button" /> au lieu de <a> et utiliser CSS pour le style pour ressembler à un lien si vous le souhaitez.

Les boutons

sont faits spécifiquement pour cliquer, et ils 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 avez besoin via javascript, donc avec javascript désactivé, ils ne montreront pas du tout et ne pas confondre l'utilisateur.

quand vous utilisez href="#" vous obtenez des tonnes de liens différents pointant vers le même endroit, ce qui ne fonctionnera pas lorsque L'agent ne supporte pas JavaScript.

10
répondu takeshin 2010-07-15 07:05:01

si vous voulez utiliser une ancre vous pouvez utiliser http://api.jquery.com/event.preventDefault / comme les autres réponses suggérées.

Vous pouvez également utiliser tout autre élément comme un span et joignez l'événement click.

$("span.clickable").click(function(){
alert('Yeah I was clicked');
});
8
répondu Neothor 2010-07-15 06:43:25

vous pouvez utiliser #0 comme href, puisque 0 n'est pas autorisé comme id, la page ne sautera pas.

<a href="#0" class="someclass">Text</a>
5
répondu Veve 2016-07-06 09:36:26

il suffit d'utiliser

<a href="javascript:;" class="someclass">Text</a>

JQUERY

$('.someclass').click(function(e) { alert("action here"); }
4
répondu Ayush 2010-07-15 07:43:20

si l'élément n'a pas de valeur significative href, alors ce n'est pas vraiment un lien, alors pourquoi ne pas utiliser un autre élément à la place?

comme le suggère Neothor, une portée est tout aussi appropriée et, si elle est correctement conçue, elle sera visiblement évidente en tant qu'élément pouvant être cliqué sur. Vous pouvez même attacher un événement de vol stationnaire, pour faire l'elemnt 'light up' comme la souris de l'utilisateur se déplace sur elle.

cependant, après avoir dit ceci, vous pouvez vouloir repenser la conception de votre site afin qu'il fonctionne sans javascript, mais est améliorée par javascript quand il est disponible.

4
répondu belugabob 2010-07-15 07:44:59

vous pourriez juste passer une étiquette d'ancrage sans une propriété href, et utiliser jQuery pour faire l'action requise:

<a class="foo">bar</a>

2
répondu kingjeffrey 2010-07-15 08:07:23
Les liens

avec href =" # "devraient presque toujours être remplacés par un élément bouton:

<button class="someclass">Text</button>

L'utilisation de liens avec href="# "est également un problème d'accessibilité, car ces liens seront visibles par les lecteurs écran, qui liront" lien - texte", mais si l'utilisateur clique, il n'ira nulle part.

2
répondu martinedwards 2015-05-22 09:00:38

j'ai utilisé:

<a href="javascript://nop/" class="someClass">Text</a>
2
répondu Brice Roncace 2015-08-12 17:58:17

si vous voulez migrer vers une section ancre sur la même page sans page sautant utiliser:

il suffit d'utiliser "#/" au lieu de "#" E. g

<a href="#/home">Home</a>
<a href="#/about">About</a>
<a href="#/contact">contact</a> page will not jump up on click..
2
répondu Agidigbi Ayodeji Victor 2016-03-15 08:31:05
$('a[href="#"]').click(function(e) {e.preventDefault(); });
2
répondu Praveen Manne 2016-06-27 10:26:31

j'ai toujours utilisé:

<a href="#?">Some text</a>

en essayant d'empêcher le saut de page. Vous ne savez pas si c'est le meilleur, mais il semble avoir travaillé pendant plusieurs années.

2
répondu Josh Harris 2017-09-28 22:07:19

vous pouvez également retourner false après avoir traité votre jquery.

par exemple.

$(".clickableAnchor").live(
    "click",
    function(){
        //your code
        return false; //<- prevents redirect to href address
    }
);
1
répondu user3581326 2014-04-28 12:34:07

j'utilise quelque chose comme ça:

<a href="#null" class="someclass">Text</a>
1
répondu stefan 2014-11-20 17:38:41

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 monter dans le DOM tree. Plus d'informations ici: https://api.jquery.com/event.stoppropagation /

1
répondu anthonyjruffa 2015-08-20 18:40:01

le #/ fonctionne, mais ajoute un événement historique au navigateur. Ainsi, cliquer en arrière ne fonctionne pas comme l'utilisateur peut vouloir/s'attendre à ce qu'il.

$('body').click('a[href="#"]', function(e) {e.preventDefault() }); est la façon dont je suis allé, car il fonctionne pour le contenu déjà existant, et tous les éléments ajoutés au DOM après charge.

spécifiquement, je devais le faire dans un menu déroulant bootstrap à l'intérieur d'un .btn-group (référence) , donc 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 pas affecté quoi que ce soit d'autre sur la page.

1
répondu David 2016-12-29 20:44:40

il y a 4 façons similaires d'empêcher la page de sauter au sommet sans aucun JavaScript:

Option 1:

<a href="#0">Link</a>

Option 2:

<a href="#!">Link</a>

Option 3:

<a href="#/">Link</a>

Option 4 ( Non recommandé ):

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

mais il est préférable d'utiliser event.preventDefault() si vous donnez l'événement de clic dans jQuery.

0
répondu ExillustX 2018-08-12 11:41:02

ajouter quelque chose après # place le foyer de la page à l'élément avec cet ID. La solution la plus simple est d'utiliser #/ même si vous utilisez jQuery. Cependant, si vous vous occupez de l'événement à jQuery, event.preventDefault() est la voie à suivre.

0
répondu Vivek Vijayan 2018-08-12 12:14:51