2012-05-01 1286 views
18

Si estoy cargando mis scripts jQuery debajo de todo el HTML de mi página, ¿aún necesito esperar $(document).ready para poder usar jQuery para encontrar elementos en la página?

+0

"Técnicamente", sí - "prácticamente", no. Esto ha sido un comportamiento consistente (no definido) para los navegadores durante años. Sin embargo, creo que podría haber algo de magia con 'ready' y frames en IE ... el script aún debería estar * dentro * de la etiqueta body. –

+0

Además, ¿significa "pie de página" '

' o al final de '' o ...? –

+0

Al final de '' –

Respuesta

1

Usted no necesita usar la función ready de jQuery, pero su código debería escribirse con esto en mente. Cualquier click u otros manejadores basados ​​en bind no pueden conectarse a los selectores correctamente, sin embargo, otros como live y $.ajax pueden funcionar como se esperaba.

Tenga cuidado al usar scripts loader o AMD con este enfoque. jQuery debe estar disponible y debe bloquear al cargar. Carga jQuery y otras deps en la cabeza.

Un gran aspecto en esta técnica que describe que esto no es necesario el uso de jQuery para la función (no necesariamente sobre el uso de pie de página):

http://encosia.com/dont-let-jquerys-document-ready-slow-you-down/

+1

¿Por qué 'click' (o selectores) no funcionaría? –

+0

(Ese enlace se refiere al uso de scripts en una posición HEAD, pero no en una posición FOOT). –

+0

Funcionaría para cualquier cosa disponible en el DOM antes de la ejecución. Cualquier cosa cargada después, por cualquier medio, como ajax o agregado en un cambio de documento posterior, no sería recogido por el 'click' de jQuery – philwinkle

5

No, no es necesario $(document).ready para cualquier código que interactúa con los elementos DOM en la página si los scripts se colocan debajo de estos elementos.

Es una buena práctica ponerlos antes de la etiqueta de cierre </body>.

+0

La etiqueta HTML solo tiene dos hijos válidos, cabeza y cuerpo, por lo que probablemente diría que es una buena práctica colocar las etiquetas de secuencia de comandos dentro de la etiqueta de cierre del cuerpo. Los analizadores pueden ser raros con HTML no válido – Hazza

5

No porque el documento ya se habrá cargado. El Dom carga de arriba a abajo. Personalmente, me gusta poner todas mis js en la parte inferior de la página en lugar de en la cabeza.

Sin embargo, es solo 1 línea de código y sugeriría usarlo solo para estar seguro. también puedes hacerlo aún más corto. $(function() {} es lo mismo que $(document).ready(function(){})

+1

No entiendo por qué debería usarlo solo para estar seguro; parece que ralentizaría innecesariamente la ejecución. –

+0

porque siempre habrá alguien con alguna configuración de navegador que fallará si no ve lo que quiere o espera. ejecutar '$ (function() {}' una vez no desacelera lo suficiente para que te importe. Mira http://stackoverflow.com/questions/8160014/document-ready-check-slows-down-ie y lee los comentarios para la respuesta aceptada usando '$ (function() {}' tomará alrededor de 2-3ms en promedio. en una nota lateral si usa php puede hacer una función o clase para poner todos los js en 1 archivo en 1 '$ (función() {}' o puede hacerlo en js para. mirar en los patrones de diseño de programación. – Yamiko

Cuestiones relacionadas