J'ai deux fonctions de JS, qui est l'ajout d'options à une boîte de sélectionComment empêcher la réinitialisation de la position de défilement de la page après la manipulation du DOM?
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 aussi simples.
Les deux fonctionnent, les éléments sont ajoutés comme prévu. Cependant, en appelant l'un d'eux, 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 client. J'ai défini des points d'arrêt dans Firebug, et cela se produit immédiatement après l'exécution de element.appendChild ou select.add. Je sais que je peux utiliser JS pour définir manuellement une position de défilement, mais je ne pensais pas que c'était nécessaire lorsque la page n'était pas rendue à nouveau. Je ne suis pas un expert avec JS ou le DOM, donc je peux très bien manquer quelque chose, mais j'ai regardé here et a couru à travers leurs exemples avec les options Try It Here et je ne peux pas reproduire le problème, Indiquer la base de code avec laquelle je travaille est 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.
Merci! Les fonctions étaient appelées à partir des boutons de style ". Je les ai changés en balises d'envergure et cela a arrangé le problème. –
Ce n'est pas (nécessairement) la solution, mais peut être dans votre cas. Pour référence future, lorsque vous utilisez une balise d'ancrage, vous voulez généralement un href valide, mais vous ne voulez peut-être pas le faire aller nulle part car vous préemptez le comportement avec javascript. C'est à ce moment que vous devez utiliser le "return: false". –
Oui. C'est ce que j'ai fait pour moi. Maintenant je me sens bête. – dooleyo