¿No podría haber problemas potenciales si un usuario envía una entrada a un evento de mouse o un evento de teclado antes de que se haya procesado toda la página? [este párrafo] se refiere a una secuencia de comandos NO usando ready()
En general, si se desea hacer referencia a un elemento de JavaScript debe haber sido ya analizado el elemento en cuestión, es decir, añadido a la Árbol DOM. Esto se aplica tanto si intentas adjuntar un controlador de eventos (con o sin jQuery), cambiar su configuración de CSS o lo que sea.
El manejador .ready()
no espera a que la página entera a ser prestados , se espera a que la página sea "listo" para la manipulación JS en el sentido de que ha sido analizada y todo el árbol DOM tiene sido construido. En ese punto, la representación aún puede estar ocurriendo, por ejemplo, el contenido real de los elementos de imagen todavía podría descargarse solo parcialmente.
Sin embargo, es posible iniciar la manipulación de elementos de JavaScript antes (o sin) el .ready()
, siempre que lo haga de un bloque de script que se incluye después el elemento (s) de que se trate en la página fuente, porque el navegador hace su análisis de arriba a abajo desde su fuente html. Un ejemplo:
<input type="text" id="input1">
<script>
// following will work, because "input1" already exists
$("#input1").change(function() { /* do something */ });
// following will NOT work, because "input2" has not been parsed yet
$("#input2").change(function() { /* do something */ });
</script>
<input type="text" id="input2">
Así que si por alguna razón usted tiene alguna pieza crítica de funcionalidad que se siente absolutamente necesario configurar antes .ready()
se puede hacer algo como lo anterior.
también Tenga en cuenta que no es necesario la función .ready()
en absoluto si se incluye la secuencia de comandos en la parte inferior del cuerpo, debido a que (al igual que con .ready()
) en ese punto se han analizado todos los elementos.
Donde haces necesidad .ready()
es de código en un archivo externo de JS si usted no puede estar seguro de que en la página se incluirá en el archivo. Si está incluido en la sección <head>
, se ejecutará antes de analizar el resto del documento, por lo que deberá usar .ready()
.
Su segundo párrafo lo pone al revés. Eso es exactamente lo que document.ready impide que suceda. – Sparky
Mi segundo párrafo se refiere a un script ** NO ** con '.ready()' – user784637
Luego debe ampliar y mejorar el formato de su pregunta para seguir explicando. Una página construida correctamente no podrá ejecutar ningún evento o entrada de mouse antes de que DOM se haya cargado completamente. Al usar jQuery, document.ready es fundamental para facilitar esto. – Sparky