¿Cuáles son las diferencias entre window.onload
el $(document).ready()
método de JavaScript y jQuery ?
javascript
jquery
dom-events
unobtrusive-javascript
Vaibhav Jain
fuente
fuente
$().ready()
hace que se active después de vezwindow.onload
en cuando.Respuestas:
El
ready
evento ocurre después de que se haya cargado el documento HTML, mientras que elonload
evento ocurre más tarde, cuando también se ha cargado todo el contenido (por ejemplo, imágenes).El
onload
evento es un evento estándar en el DOM, mientras que elready
evento es específico de jQuery. El propósito delready
evento es que ocurra lo antes posible después de que se haya cargado el documento, de modo que el código que agrega funcionalidad a los elementos de la página no tenga que esperar a que se cargue todo el contenido.fuente
ready
evento es específico de jQuery. Está usando elDOMContentLoaded
evento si está disponible en el navegador, de lo contrario lo emula. No existe un equivalente exacto en el DOM porque elDOMContentLoaded
evento no es compatible con todos los navegadores.onload
.onload
es el nombre de una propiedad de objeto que almacena una función que se invocará cuando se active elload
evento.window.onload
es el evento JavaScript incorporado, pero como su implementación tuvo peculiaridades sutiles en los navegadores (Firefox, Internet Explorer 6, Internet Explorer 8 y Opera ), jQuery proporcionadocument.ready
, que abstrae esos archivos y se activa tan pronto como el DOM de la página está listo (no espera imágenes, etc.)$(document).ready
(nota que es nodocument.ready
lo es, que no está definido) es una función jQuery, que ajusta y proporciona coherencia a los siguientes eventos:document.ondomcontentready
/document.ondomcontentloaded
- un evento nuevo que se activa cuando se carga el DOM del documento (que puede pasar algún tiempo antes de que se carguen las imágenes, etc.); de nuevo, ligeramente diferente en Internet Explorer y en el resto del mundowindow.onload
(que se implementa incluso en navegadores antiguos), que se activa cuando se carga toda la página (imágenes, estilos, etc.)fuente
load
eventowindow
se implementa de manera razonablemente consistente en todos los navegadores. El problema que jQuery y otras bibliotecas están tratando de resolver es el que mencionó, que es que elload
evento no se activa hasta que se hayan cargado todos los recursos dependientes, como imágenes y hojas de estilo, lo que podría pasar mucho tiempo después de que el DOM se haya cargado por completo, Prestados y listos para la interacción. El evento que se dispara en la mayoría de los navegadores cuando el DOM está listoDOMContentLoaded
, no se llamaDOMContentReady
.onload
(hay diferencias wrt FF / IE / Opera). En cuanto aDOMContentLoaded
, tienes toda la razón. Edición para aclarar.document.onload
era utilizable). En lo que respecta a window.onload:window.onload = fn1;window.onload=fn2;
- solo se invoca fn2 onload. Algunos webhosts gratuitos insertan su propio código en los documentos, y a veces esto golpeó el código de la página.$(document).ready()
es un evento jQuery. JQuery's$(document).ready()
llama método tan pronto como el DOM está listo (lo que significa que el navegador ha analizado el HTML y ha creado el árbol DOM). Esto le permite ejecutar código tan pronto como el documento esté listo para ser manipulado.Por ejemplo, si un navegador admite el evento DOMContentLoaded (como lo hacen muchos navegadores que no son IE), se activará en ese evento. (Tenga en cuenta que el evento DOMContentLoaded solo se agregó a IE en IE9 +).
Se pueden usar dos sintaxis para esto:
O la versión abreviada:
Puntos principales para
$(document).ready()
:$
conjQuery
cuando reciba "$ no está definido".$(window).load()
lugar.window.onload()
es una función nativa de JavaScript. Elwindow.onload()
evento se activa cuando se ha cargado todo el contenido de su página, incluido el DOM (modelo de objeto de documento), anuncios publicitarios e imágenes. Otra diferencia entre los dos es que, si bien podemos tener más de una$(document).ready()
función, solo podemos tener unaonload
función.fuente
Un evento de carga de Windows se dispara cuando todo el contenido de su página está completamente cargado, incluido el contenido DOM (modelo de objeto de documento) y JavaScript asíncrono , marcos e imágenes . También puedes usar body onload =. Ambos son lo mismo;
window.onload = function(){}
y<body onload="func();">
son diferentes formas de usar el mismo evento.El
$document.ready
evento de función jQuery se ejecuta un poco anteswindow.onload
y se llama una vez que se carga el DOM (modelo de objeto de documento) en su página. No esperará a que las imágenes, los marcos se carguen completamente .Tomado del siguiente artículo: cómo
$document.ready()
es diferente dewindow.onload()
fuente
fuente
Una advertencia para usar
$(document).ready()
con Internet Explorer. Si una solicitud HTTP se interrumpe antes de que se cargue todo el documento (por ejemplo, mientras una página se transmite al navegador, se hace clic en otro enlace) IE activará el$(document).ready
evento.Si algún código dentro del
$(document).ready()
evento hace referencia a objetos DOM, existe la posibilidad de que esos objetos no se encuentren y pueden producirse errores de Javascript. Proteja sus referencias a esos objetos o difiera el código que hace referencia a esos objetos al evento window.load.No he podido reproducir este problema en otros navegadores (específicamente, Chrome y Firefox)
fuente
Un pequeño consejo:
Siempre use el
window.addEventListener
para agregar un evento a la ventana. Porque de esa manera puede ejecutar el código en diferentes controladores de eventos.Código correcto:
Codigo invalido:
Esto se debe a que onload es solo propiedad del objeto, que se sobrescribe.
Por analogía con
addEventListener
, es mejor usar en$(document).ready()
lugar de cargar.fuente
Eventos
$(document).on('ready', handler)
se une al evento listo de jQuery. Se llama al controlador cuando se carga el DOM . Es posible que aún falten activos como imágenes . Nunca se llamará si el documento está listo en el momento de la encuadernación. jQuery usa DOMContentLoaded -Event para eso, emulándolo si no está disponible.$(document).on('load', handler)
es un evento que se activará una vez que se carguen todos los recursos del servidor. Las imágenes se cargan ahora. Mientras que onload es un evento HTML sin formato, jQuery construye ready .Las funciones
$(document).ready(handler)
En realidad es una promesa . Se llamará al controlador de inmediato si el documento está listo en el momento de la llamada. De lo contrario, se une already
evento.Antes de jQuery 1.8 ,
$(document).load(handler)
existía como un alias para$(document).on('load',handler)
.Otras lecturas
fuente
$.fn.load
eso ya no se comporta como una carpeta de eventos. De hecho, está obsoleto desde jquery 1.8. Lo actualicé en consecuenciaEl
$(document).ready()
es un evento jQuery que ocurre cuando el documento HTML se ha cargado completamente, mientras que elwindow.onload
evento ocurre más tarde, cuando se carga todo, incluidas las imágenes de la página.También window.onload es un evento javascript puro en el DOM, mientras que el
$(document).ready()
evento es un método en jQuery.$(document).ready()
suele ser el contenedor de jQuery para asegurarse de que todos los elementos cargados se utilicen en jQuery ...Mire el código fuente de jQuery para comprender cómo funciona:
También he creado la imagen a continuación como referencias rápidas para ambos:
fuente
window.onload: un evento JavaScript normal.
document.ready: un evento jQuery específico cuando se ha cargado todo el HTML.
fuente
Una cosa para recordar (o debería decir recordar) es que no puedes apilar
onload
s como puedes hacerloready
. En otras palabras, jQuery magic permite múltiplesready
s en la misma página, pero no puede hacerlo cononload
.El último
onload
anulará cualquieronload
s anterior .Una buena manera de lidiar con eso es con una función aparentemente escrita por Simon Willison y descrita en Uso de múltiples funciones de carga de JavaScript .
fuente
Document.ready
(un evento jQuery) se activará cuando todos los elementos estén en su lugar, y se puede hacer referencia a ellos en el código JavaScript, pero el contenido no se carga necesariamente.Document.ready
se ejecuta cuando se carga el documento HTML.Sin
window.load
embargo, esperará a que la página se cargue por completo. Esto incluye marcos internos, imágenes, etc.fuente
El evento document.ready ocurre cuando el documento HTML ha sido cargado, y el
window.onload
evento ocurre siempre más tarde, cuando todo el contenido (imágenes, etc.) ha sido cargado.Puede usar el
document.ready
evento si desea intervenir "temprano" en el proceso de renderizado, sin esperar a que se carguen las imágenes. Si necesita que las imágenes (o cualquier otro "contenido") estén listas antes de que su script "haga algo", debe esperar hastawindow.onload
.Por ejemplo, si está implementando un patrón de "Presentación de diapositivas" y necesita realizar cálculos basados en tamaños de imagen, es posible que desee esperar hasta
window.onload
. De lo contrario, puede experimentar algunos problemas aleatorios, dependiendo de qué tan rápido se carguen las imágenes. Su script se estaría ejecutando simultáneamente con el hilo que carga imágenes. Si su script es lo suficientemente largo o el servidor es lo suficientemente rápido, es posible que no note un problema si las imágenes llegan a tiempo. Pero la práctica más segura sería permitir que las imágenes se carguen.document.ready
podría ser un buen evento para que muestres algún signo de "cargando ..." a los usuarios, y luegowindow.onload
, puede completar cualquier script que necesite recursos cargados, y finalmente eliminar el signo "Cargando ...".Ejemplos:
fuente
window.onload
es una función incorporada de JavaScript.window.onload
se dispara cuando se carga la página HTML.window.onload
se puede escribir solo una vez.document.ready
es una función de la biblioteca jQuery.document.ready
se dispara cuando HTML y todos los códigos JavaScript, CSS e imágenes que se incluyen en el archivo HTML están completamente cargados.document.ready
Se puede escribir varias veces según los requisitos.fuente
Cuando dices
$(document).ready(f)
, le dices al motor de scripts que haga lo siguiente:$
y selecciónelo, ya que no está en el ámbito local, debe realizar una búsqueda de tabla hash, que puede tener o no colisiones.ready
del objeto seleccionado, que implica otra búsqueda de tabla hash en el objeto seleccionado para encontrar el método e invocarlo.En el mejor de los casos, se trata de 2 búsquedas de tablas hash, pero eso ignora el trabajo pesado realizado por jQuery, donde
$
está el sumidero de la cocina de todas las entradas posibles a jQuery, por lo que es probable que haya otro mapa para enviar la consulta al controlador correcto.Alternativamente, puedes hacer esto:
que lo hará
onload
es una propiedad o no haciendo una búsqueda de tabla hash, ya que es, se llama como una función.En el mejor de los casos, esto cuesta una sola búsqueda de tabla hash, que es necesaria porque
onload
debe buscarse.Idealmente, jQuery compilaría sus consultas en cadenas que se pueden pegar para hacer lo que quería que jQuery hiciera pero sin el despacho de tiempo de ejecución de jQuery. De esta manera tienes una opción de
eval
.fuente
window.onload es proporcionado por la API del DOM y dice "el evento de carga se dispara cuando se carga un recurso determinado".
"El evento de carga se dispara al final del proceso de carga del documento. En este punto, todos los objetos del documento están en el DOM y todas las imágenes, scripts, enlaces y subtramas han terminado de cargarse". Onload DOM
Pero en jQuery $ (document) .ready () solo se ejecutará una vez que la página Document Object Model (DOM) esté lista para que se ejecute el código JavaScript. Esto no incluye imágenes, scripts, iframes, etc. Evento listo para jquery
Por lo tanto, el método jquery ready se ejecutará antes que el evento dom onload.
fuente