2012-11-27 16 views
16

qual è la differenza tra:

$(document).ready(initialize); 

e

$(document).on('ready',initialize); 

Per me sembrano funzionare allo stesso modo.

+2

Si usa un metodo direttamente, gli altri proxy attraverso un metodo di supporto. – Sampson

risposta

18

$(document).on('ready',initialize); non funziona se il DOM è già pronto quando il file viene eseguito.

$(document).ready() ha una gestione speciale per questo: assicura viene sempre chiamato

+0

Anche quest'ultimo non è correlato al contenuto dell'oggetto jQuery. Quindi attualmente '$(). Ready()' e '$ ('foo'). Ready()' sarebbe esattamente la stessa cosa. – ThiefMaster

+0

per me sembra che le persone +1 risposte voodoo non capiscano tbh –

7

tl; dr:

  • $(document).on('ready', ...) è obsoleto poiché non esegue callback legati dopo il DOM era completamente analizzato. Ottiene oggetto evento come primo argomento.

  • $().ready() ottiene un riferimento a jQuery come primo argomento.


$(document).on('ready',initialize);

è vincolante un gestore di eventi per readydocument, come ci si aspetterebbe da qualsiasi altro gestore di eventi. Using this to listen to DOM ready is deprecated as of jQuery 1.8:

C'è anche $(document).bind("ready", handler), deprecato come di jQuery 1.8. Ciò si comporta in modo simile al metodo ready ma se l'evento pronto è già stato attivato e si prova a .bind("ready") il gestore associato non verrà eseguito. I gestori pronti in questo modo vengono eseguiti dopo qualsiasi vincolo dagli altri tre metodi precedenti.

Nota che ready è un evento personalizzato e triggered by jQuery internally. Ciò significa anche che è possibile attivarlo manualmente, il che potrebbe rovinare le cose.


$(document).ready(initialize);

realtà non associare un gestore di eventi. jQuery.fn.ready is a dedicated method per registrare i callback da eseguire quando il DOM è stato completamente analizzato. jQuery aggiunge il callback a un oggetto promessa e non importa quale selettore passi a $.

Inoltre, il callback ottiene un riferimento all'oggetto jQuery anziché a un oggetto evento.


This part of the source mostra bene che callback registrate simili vengono gestite in modo diverso:

// If there are functions bound, to execute 
readyList.resolveWith(document, [jQuery]); 

// Trigger any bound ready events 
if (jQuery.fn.trigger) { 
    jQuery(document).trigger("ready").off("ready"); 
} 
Problemi correlati