¿Cuáles son las diferencias entre window.onloadel $(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.onloaden cuando.Respuestas:
El
readyevento ocurre después de que se haya cargado el documento HTML, mientras que elonloadevento ocurre más tarde, cuando también se ha cargado todo el contenido (por ejemplo, imágenes).El
onloadevento es un evento estándar en el DOM, mientras que elreadyevento es específico de jQuery. El propósito delreadyevento 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
readyevento es específico de jQuery. Está usando elDOMContentLoadedevento si está disponible en el navegador, de lo contrario lo emula. No existe un equivalente exacto en el DOM porque elDOMContentLoadedevento no es compatible con todos los navegadores.onload.onloades el nombre de una propiedad de objeto que almacena una función que se invocará cuando se active elloadevento.window.onloades 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.readylo 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
loadeventowindowse 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 elloadevento 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.onloadera 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():$conjQuerycuando 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 unaonloadfunció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.readyevento de función jQuery se ejecuta un poco anteswindow.onloady 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).readyevento.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.addEventListenerpara 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 alreadyevento.Antes de jQuery 1.8 ,
$(document).load(handler)existía como un alias para$(document).on('load',handler).Otras lecturas
fuente
$.fn.loadeso 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.onloadevento 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
onloads como puedes hacerloready. En otras palabras, jQuery magic permite múltiplesreadys en la misma página, pero no puede hacerlo cononload.El último
onloadanulará cualquieronloads 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.readyse ejecuta cuando se carga el documento HTML.Sin
window.loadembargo, 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.onloadevento ocurre siempre más tarde, cuando todo el contenido (imágenes, etc.) ha sido cargado.Puede usar el
document.readyevento 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.readypodrí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.onloades una función incorporada de JavaScript.window.onloadse dispara cuando se carga la página HTML.window.onloadse puede escribir solo una vez.document.readyes una función de la biblioteca jQuery.document.readyse 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.readySe 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.readydel 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á
onloades 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
onloaddebe 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