2010-01-18 6 views
21

j'ai créé une fonction javascript que j'ajouter à un point d'ancrage en tant que telleancre éviter de défilement vers le haut sur le clic

javascript:

somefunction = function() {alert('foo')} 

html:

<a href="#" onclick="return somefunction()">anchor</a> 

chaque fois que je clique sur l'ancre la fonction s'exécute mais l'écran défile vers le haut

Je sais que je pourrais le faire

<a href="javascript:void(0)" onclick="return somefunction()">anchor</a> 

mais j'ai vu la première option mis en œuvre sans cette Hick d'défilement vers le haut

est-il un truc à elle?

merci

Répondre

46

Le onclick provoque la page à soumettre à nouveau, donc le défilement vers le haut.

Vous avez besoin de l'événement onclick pour renvoyer un faux afin d'éviter la publication.

Cela peut être fait en changeant votre fonction pour retourner un faux:

somefunction = function() {alert('foo'); return false;} 

Ou changer le lien et l'événement onClick de le faire:

<a href="javascript:void(0)" onclick="somefunction(); return false;">anchor</a> 
2

Retour false de votre gestionnaire onclick, par exemple:

<a href="#" onclick="somefunction(); return false;">anchor</a> 
2

Vous devez faire somefunction() return false, ou vous devez ajouter explicitement return false à votre gestionnaire onclick. Par exemple:

<a href="#" onclick="somefunction(); return false;">anchor</a> 

Cela aura le navigateur ignore la partie href du lien quand quelqu'un clique dessus.

4

L'astuce est que votre onclick retourne la valeur de somefunction, de sorte que si vous assurez somefunction toujours return false, l'événement sera de retour aussi faux et d'annuler le comportement par défaut de l'ancre.

ce qui devrait résoudre votre problème:

somefunction = function() { alert('foo'); return false; } 

Mais je dois mentionner que quand il y a une erreur quelque part dans somefunction, le reste du javascript sera pas exécuté, et le navigateur sera toujours suivre le lien vers #. Il est donc conseillé d'utiliser javascript:void(0) à la place, car cela vous débarrasse de ce problème.

Questions connexes