El código jQuery que manipula DOM en window.load no siempre se ejecuta

Necesito centrar el texto en una lista de selección. No existe un método de navegador cruzado y dispositivo que use solo CSS, por lo que usé JavaScript para establecer una sangría de texto.

El código toma el texto de la lista de selección, lo agrega a un lapso (que con css hace que el texto tenga el mismo tamaño) y mide el ancho del lapso. Con ese valor, se necesitan algunas matemáticas simples para determinar cuál debe ser la sangría del texto.

$(window).load(function() {
  function textIndentFunc () {
     textString = $('#from-1 :selected').text();
     $('#hidden').text(textString);
     textWidth = $('#hidden').width();
     inputWidth = $('#from-1 select').width();
     indentMy = (inputWidth / 2) - (textWidth / 2);
     $('#from-1').css('text-indent',indentMy); 
}
$('#from-1 select').change(function() {
    textIndentFunc();
});
textIndentFunc();
});

La mayoría de las veces este código funciona bien, pero a veces parece que no hace nada, en cuyo caso normalmente se soluciona al actualizar la página. ¿Por qué este código es tan temperamental? ¿Tiene que ver con tener que manipular el dom?

Muchas Gracias

preguntado el 22 de mayo de 12 a las 15:05

¿Se activa el evento .change() una vez que cambia el elemento? -

Sí, eso siempre parece funcionar bien. -

1 Respuestas

Do $(document).ready() no $(window).load()

Al invocar $(document).ready() su función se llama una vez que el DOM se procesa y está listo para ser manipulado mientras load() devolverá la llamada una vez que todos los activos estén cargados (imágenes, sonidos).

respondido 07 mar '13, 17:03

Estoy teniendo el mismo problema. En la cara, el código es menos confiable ahora. FYI, mi código ya tenía carga de ventana y dom listo para hacer cosas diferentes. - evanss

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.