2012-11-21 10 views
5

In jQuery bereit Ereignislogik:Warum Feuer jQuery das Ereignis ready asynchron

// 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); 
} 

Könnten Sie den Kommentar erklären: „Handle It asynchron Skripten die Möglichkeit zu geben, zu verzögern bereit“.

Ich verstehe nicht, was Skripte und warum bereit zu verzögern?

+0

Ich stellte mir die gleiche Frage einige Male. – gdoron

+0

Es ist wirklich interessant für mich, auch – johnny

+1

Es scheint, dass dies zu IE _we're hier ist, weil readyState === "complete" in altIE, die gut genug für uns ist, die Dom bereit zu rufen! _ Http: // Bugs. jquery.com/ticket/12282#comment:15 – undefined

Antwort

6

Wenn der Bereitschaftsrückruf (der die readyList auslöst) sofort Feuer haben würde, könnten Sie die Ausführung nicht halten, sobald das DOM mit der holdReady Funktion fertig ist.

jQuery.holdReady(hold)
Beschreibung: Hält oder gibt die Ausführung bereit Veranstaltung jQuery.

Die $ .holdReady() Methode ermöglicht es dem Anrufer jQuery bereit Ereignis zu verzögern.

Diese erweiterte Funktion wird normalerweise von dynamischen Skriptladeprogrammen verwendet, die zusätzliches JavaScript wie z. B. jQuery-Plugins laden möchten, bevor das Ereignis ready zulässig ist, obwohl das DOM bereit sein könnte.

Diese Methode muss früh im Dokument aufgerufen werden, z. B. unmittelbar nach dem jQuery-Skript-Tag. Der Aufruf dieser Methode, nachdem das Ereignis ready bereits ausgelöst wurde, hat keine Auswirkungen.

+0

+1, gute sleuth Arbeit –

+0

Hey gdoron :), aber 'holdReady' verwendet nicht _readystate_ https://github.com/jquery/jquery/blob/master/src/core.js#L370 es scheint, dass die Zeile gehört jQuery innere Handhabung von bereit Ereignis, https://github.com/jquery/jquery/blob/master/src/core.js#L846 – undefined

+0

@undefined, das ist richtig, es verwendet ['readyWait'] (https: // github.com/jquery/jquery/blob/master/src/core.js#L372), das im Bereitschaftsrückruf überprüft wird: ['if (wait === true? --jQuery.readyWait: jQuery.isReady) { return;} '] (https://github.com/jquery/jquery/blob/master/src/core.js#L382) – gdoron

0

es hat mit $.holdReady() zu tun, mit dem Sie das Ereignis ready verzögern können. Ein Anwendungsfall könnte sein, dass Sie Initialisierungskram machen wollen, bevor alle anderen Skripte ausgeführt werden. Sie können den Vorgang verzögern, bis Sie mit der Initialisierung fertig sind.