2012-06-07 19 views
6

Estaba usando $(window).load(function(){}); para mis proyectos hasta que en algún lugar vi que alguien dijo que podíamos simplemente use $(function(){}); y se realizarían de manera idéntica.
Pero ahora que tengo más experiencia me he dado cuenta de que no son idénticas. Noté que la primera pieza entra un poco después de la segunda parte del código.
Solo quiero saber cuál es la diferencia?

+6

El primero se une la función al evento 'load', y el segundo se une al evento' DOMContentLoaded' (que se produce más pronto) –

+0

@ ŠimeVidas , Justo en el blanco +1 – Jashwant

+0

posible duplicado de [jQuery - ¿Cuáles son las diferencias entre $ (documento) .ready y $ (ventana) .load?] (Http://stackoverflow.com/questions/8396407/jquery-what-are -differences-between-document-ready-and-window-load) – Mottie

Respuesta

10
$(document).ready(function(){}) 

a esperar hasta que se cargue el documento (se carga árbol DOM) y no se carga hasta que toda la ventana. por ejemplo, no esperará a que las imágenes, css o javascript se carguen por completo. Una vez que el DOM se carga con todos los componentes HTML y controladores de eventos el documento está listo para ser procesado y luego el $ (document) ready() completará

$(window).load(function(){});

Esta espera a toda la ventana para estar cargado. Cuando se carga la página completa, solo se completa el $ (ventana) .load(). Por lo tanto, obviamente $ (document) .ready (function() {}) termina antes de $ (window) .load() porque llenar los componentes (como images, css) lleva más tiempo que simplemente cargar el árbol DOM.

Así $(function(){}); no puede usarse como un reemplazo para $(window).load(function(){});

2

$(window).load de mi experiencia espera hasta que todo, incluyendo imágenes se carga antes de ejecutar donde como $(function() {}); tiene el mismo comportamiento que $(document).ready(function() {});

Por favor que alguien me corrija si estoy equivocado.

+3

En el desbordamiento de la pila, lo corregiremos si está equivocado; no tienes que pedirlo :) En este caso, no estás equivocado en absoluto. –

+1

Estoy de acuerdo con David. Corregimos incluso el formato :) – Jashwant

0

El segundo es/era un atajo para $(document).ready(), que debería ejecutarse antes del evento de carga de window.

Tenga en cuenta que $(document).ready() es la forma preferida de vincular algo a document carga; hay otras maneras de hacerlo como la que mostró, pero es preferible.

4

Desde el jQuery docs en sí.

La primera cosa que los programadores más de Javascript terminan haciendo es añadir algo de código para su programa, similar a esto:

window.onload = function(){ alert("welcome"); } 

Dentro de los cuales es el código que desea ejecutar la derecha cuando se carga la página . Sin embargo, es problemático que el código JavaScript no se ejecute hasta que todas las imágenes hayan terminado de descargarse (esto incluye anuncios publicitarios). La razón para usar window.onload en primer lugar es que el 'documento' HTML aún no se ha terminado de cargar, cuando intenta ejecutar su código por primera vez.

burlar tanto problemas, jQuery tiene una declaración simple que comprueba el documento y espera hasta que esté listo para ser manipulado, conocido como el evento ready:

$(document).ready(function(){ 
    // Your code here 
}); 

Ahora,

$(window).load(function(){}); es igual a window.onload = function(){ alert("welcome"); }

Y, $(function(){}); es un acceso directo a $(document).ready(function(){ });

pienso, esto borra todo :)

+4

Como nota al pie, yo personalmente siempre prefiero deletrear '$ (documento) .ready (function() {...});' para mayor claridad. Un desarrollador menos experimentado que viene detrás de mí podría no saber lo que '$ (function() {..}' significa, o cualquiera (incluyéndome a mí) podría echarle un vistazo y ver 'function() {...}' en su lugar y obtener la idea equivocada. Al codificar, siempre es mejor ser claro que guardar un puñado de teclas y fomentar la confusión en la línea. – Blazemonger

+0

Estoy de acuerdo @Blazemonger :) – Jashwant

+0

@Jashwant - ¿Sabes exactamente qué desencadena $ (ventana) .load() ¿para disparar? Creo que es cuando 'document.readyState' cambia a' completo' pero no puedo encontrarlo en la documentación de jQuery en ninguna parte. Aquí está la referencia de Mozilla: https://developer.mozilla.org/en-US/docs/Web/API/document.readyState – jamis0n

Cuestiones relacionadas