2012-11-21 12 views
5

jQuery तैयार घटना तर्क में:jQuery तैयार घटना क्यों आग करता एसिंक्रोनस रूप

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

आप टिप्पणी समझा सकते हैं: "यह अतुल्यकालिक रूप से संभाल स्क्रिप्ट तैयार करने में देरी करने का अवसर अनुमति देने के लिए"।

मुझे समझ में नहीं आता कि स्क्रिप्ट और क्यों तैयार करने में देरी हो रही है?

+0

मैंने खुद को एक ही प्रश्न दो बार पूछा। – gdoron

+0

यह वास्तव में मेरे लिए दिलचस्प है, भी – johnny

+1

ऐसा लगता है कि यह संबंधित है IE करने के लिए यहाँ _we're क्योंकि readyState === "पूर्ण" Oldie में जो काफी अच्छा हमें डोम तैयार कॉल करने के लिए है _ http:! // कीड़े। jquery.com/ticket/12282#comment:15 – undefined

उत्तर

6

यदि तैयार कॉलबैक (जो readyList को आग लगती है) तुरंत आग लगती है, तो DOM holdReady फ़ंक्शन के साथ तैयार होने के बाद आप इसे निष्पादित नहीं कर पाएंगे।

jQuery.holdReady(hold)
विवरण: धारण या विज्ञप्ति jQuery के लिए तैयार घटना के निष्पादन।

$ .holdReady() प्रणाली कॉलर jQuery के लिए तैयार घटना में देरी करने की अनुमति देता है।

यह उन्नत सुविधा आमतौर पर गतिशील स्क्रिप्ट लोडर्स द्वारा उपयोग की जाएगी जो तैयार घटना होने की अनुमति देने से पहले jQuery प्लगइन जैसे अतिरिक्त जावास्क्रिप्ट लोड करना चाहते हैं, भले ही डोम तैयार हो।

इस विधि को दस्तावेज़ में जल्दी ही कहा जाना चाहिए, जैसे कि jQuery स्क्रिप्ट टैग के तुरंत बाद। तैयार घटना के बाद इस विधि को कॉल करने से पहले ही कोई फर्क नहीं पड़ता है।

+0

+1, अच्छा स्लेथ काम –

+0

अरे gdoron :), लेकिन 'holdReady' _readystate_ https://github.com/jquery/jquery/blob/master/src/core.js#L370 का उपयोग नहीं करता है ऐसा लगता है कि रेखा संबंधित है तैयार घटना के jQuery भीतरी से निपटने के लिए, https://github.com/jquery/jquery/blob/master/src/core.js#L846 – undefined

+0

@undefined, यह सही है, यह का उपयोग करता है [ 'readyWait'] (https: // github.com/jquery/jquery/blob/master/src/core.js#L372) जिसे तैयार कॉलबैक में चेक किया जा रहा है: ['if (प्रतीक्षा === सच? --jQuery.readyWait: jQuery.isReady) { वापसी;} '] (https://github.com/jquery/jquery/blob/master/src/core.js#L382) – gdoron

0

इसे $.holdReady() के साथ करना है, जो आपको तैयार कार्यक्रम में देरी करने की अनुमति देता है। एक उपयोग केस हो सकता है कि आप अपनी सभी अन्य स्क्रिप्ट चलाने से पहले कुछ प्रारंभिक सामग्री करना चाहते हैं। जब तक आप प्रारंभ नहीं कर लेते हैं तब तक आप तैयार हो सकते हैं।

संबंधित मुद्दे