2012-11-21 7 views
5

Nella logica evento ready jQuery:Perché jQuery fuoco l'evento ready in modo asincrono

// Catch cases where $(document).ready() is called after the 
// browser event has already occurred. 
if (document.readyState === "complete") { 
    // Handle it asynchronously to allow scripts the opportunity to delay ready 
    return setTimeout(jQuery.ready, 1); 
} 

Potrebbe spiegare il commento: "Gestire in modo asincrono per consentire gli script l'opportunità di ritardare pronto".

Non capisco cosa script e perché ritardare pronto?

+0

Mi sono posto la stessa domanda un paio di volte. – gdoron

+0

Anche per me è molto interessante – johnny

+1

Sembra che questo sia correlato a IE _siamo qui perché readyState === "completo" in oldIE che è abbastanza buono per poter chiamare dom ready! _ Http: // bugs. jquery.com/ticket/12282#comment:15 – undefined

risposta

6

Se il callback pronto (che attiva lo readyList) avrebbe attivato immediatamente, non è possibile mantenerlo in esecuzione quando il DOM è pronto con la funzione holdReady.

jQuery.holdReady(hold)
Descrizione: Contiene o rilascia l'esecuzione di eventi pronti di jQuery.

Il $ .holdReady() metodo consente al chiamante di ritardare evento pronto di jQuery.

Questa funzionalità avanzata viene in genere utilizzata da caricatori di script dinamici che desiderano caricare JavaScript aggiuntivo come i plugin jQuery prima di consentire l'evento pronto, anche se il DOM può essere pronto.

Questo metodo deve essere richiamato all'inizio del documento, ad esempio nell'immediato dopo il tag di script jQuery. Chiamare questo metodo dopo che l'evento pronto è già stato attivato non avrà alcun effetto.

+0

+1, ottimo lavoro con lo sleuth –

+0

Hey gdoron :), ma 'holdReady' non usa _readystate_ https://github.com/jquery/jquery/blob/master/src/core.js#L370 sembra che la riga appartenga a jQuery gestione interna dell'evento pronto, https://github.com/jquery/jquery/blob/master/src/core.js#L846 – undefined

+0

@undefined, è vero, utilizza ['readyWait'] (https: // github.com/jquery/jquery/blob/master/src/core.js#L372) che viene controllato nel callback pronto: ['if (wait === true? --jQuery.readyWait: jQuery.isReady) { ritorno;} '] (https://github.com/jquery/jquery/blob/master/src/core.js#L382) – gdoron

0

ha a che fare con $.holdReady(), che consente di ritardare l'evento pronto. Un caso d'uso potrebbe essere che si desidera eseguire alcune operazioni di inizializzazione prima dell'esecuzione di tutti gli altri script. Potresti posticipare fino a quando non hai terminato l'inizializzazione.

Problemi correlati