Tengo dos funciones JS, que es la adición de opciones para un selecto cuadro de¿Cómo evitar el reinicio de la posición de desplazamiento de la página después de la manipulación del 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);
}
}
y otro que está haciendo un document.getElementById (formid) .appendChild (newHiddenInput) en una función también muy sencillos.
Ambos funcionan, los elementos se agregan como se esperaba. Sin embargo, al llamar a cualquiera de ellos, la página restablece su posición de desplazamiento a la parte superior de la página en IE6 y FF. No hay devolución de datos, esto es pura manipulación del lado del cliente. Establecí puntos de interrupción en Firebug, y ocurre inmediatamente después de que se ejecute el elemento.appendChild o select.add. Sé que puedo usar JS para establecer manualmente una posición de desplazamiento, pero no creí que fuera necesario cuando la página no se vuelve a procesar.
No soy un experto con JS o el DOM, así que puede que me esté extrañando algo, pero miré here y revisé sus ejemplos con las opciones de Pruébelo aquí y no puedo replicar el problema, indicando que la base de código con la que estoy trabajando es el culpable.
¿Alguna idea de por qué se está restableciendo la posición de desplazamiento? jQuery también está disponible para mí si proporciona una mejor alternativa.
¡Gracias! Las funciones se llamaban desde "botones" de estilo. Los cambié a etiquetas de span y eso solucionó el problema. –
Esa no es (necesariamente) la solución, pero puede ser en su caso. Para referencia futura, cuando se usa una etiqueta delimitadora, normalmente se quiere un href válido, pero es posible que no desee que se vaya a ninguna parte ya que se está previniendo el comportamiento con javascript. Ahí es cuando necesitas usar "return: false"; –
Sí. Eso es lo que hizo por mí. Ahora me siento tonto. – dooleyo