Comment empêcher la réinitialisation de la position de défilement de la page après la manipulation DOM?

J'ai deux fonctions JS, une qui ajoute des options à une boîte de sélection

function addOption(selectId, text, value) { var selectbox = document.getElementById(selectId); var optNew = document.createElement('option'); optNew.text = text; optNew.value = value; try { selectbox.add(optNew, null); //page position resets after this } catch(ex) { selectbox.add(optNew); } } 

Et un autre qui fait un document.getElementById (formId) .appendChild (newHiddenInput) dans une fonction similairement simple.

Ils fonctionnent tous les deux, les éléments sont ajoutés comme prévu. Cependant, lors de l'appel de l'un ou l'autre, la page réinitialise sa position de défilement vers le haut de la page dans IE6 et FF. Il n'y a pas de postback, c'est une manipulation purement clientide. J'ai défini des points d'arrêt dans Firebug, et il se produit immédiatement après l'élément.appendChild ou select.add est exécuté. Je sais que je peux utiliser JS pour définir manuellement une position de défilement, mais je ne pensais pas qu'il était nécessaire lorsque la page n'est pas redéfinie.

Je ne suis pas expert avec JS ou le DOM, alors je peux très bien manquer quelque chose, mais j'ai regardé ici et j'ai couru leurs exemples avec les options Try it Here et je ne peux pas répliquer le problème en indiquant la base de code I Je travaille avec le coupable.

Des idées pour lesquelles la position de défilement est en cours de réinitialisation? JQuery est également disponible pour moi, s'il offre une meilleure alternative.

Si les fonctions sont appelées à partir d'un lien, vous pourriez avoir une ancre interne dans votre lien:

 http://www.website.com/page.html# 

Cela provoque ces comportements. Le comportement par défaut est que si une ancre n'existe pas, la position de défilement de la page saute vers le haut ( scrollTop = 0 ).

Si cela se produit sur chaque appel de fonction indépendamment de la source, cela peut être franchi sur la liste.

Qu'est-ce qui active l'événement?

Si c'est une ancre, puis sur l'événement de clic, vous devez "renvoyer faux"; Après l'appel à votre code jQuery / Ajax / jScript.

Si c'est un bouton, vous devrez peut-être faire la même chose.

J'avais cette question hier et c'était la résolution.

Alors <a href="#" onclick="DoStuff(); return false;">My link</a>