2010-10-11 13 views
40

हमारे पास एक JQuery $(function() कथन है:

<script type="text/javascript"> 
$(function(){ 
    //Code.. 
}) 
</script> 

गूंगा प्रश्न - जब यह फ़ंक्शन निष्पादित किया जाता है? क्या यह तब होता है जब संपूर्ण HTML पृष्ठ क्लाइंट द्वारा डाउनलोड किया गया हो?

$(function() के भीतर अपने कोड को लपेटने का उपयोग करने का क्या फायदा है:

<script type="text/javascript"> 
//Code.. 
</script> 
+2

मुझे नहीं लगता कि यह तब तक हर आग होगी जब तक कि आप उस कोष्ठक को बंद न करें। jQuery उचित वाक्यविन्यास की आवश्यकता को खत्म नहीं करता है! – chriscauley

उत्तर

17

जैसे ही डीओएम पार्स किया जाता है और कई उपस्थिति होने पर उपस्थिति के क्रम में इसे निष्पादित किया जाता है। इस बिंदु पर दस्तावेज़ प्रदर्शित नहीं किया गया है, यह सिर्फ पार्स किया गया है।

+0

मुझे यकीन नहीं है कि दस्तावेज़ को पार्स किए जाने के बारे में सही है लेकिन प्रदर्शित नहीं किया गया है। मैंने सोचा कि ब्राउज़र आमतौर पर तत्वों को प्रदर्शित करते हैं क्योंकि उन्हें पार्स किया जा रहा है। क्या मैं गलत हूँ? – user113716

+0

@ पैट्रिक dw: आप नहीं हैं। साथ ही, आप '$ .ready' से शैली और स्थिति डेटा को पढ़ और कुशल बना सकते हैं; ब्राउज़र ने उस बिंदु पर पृष्ठ के लेआउट की गणना पहले ही कर दी है। – Tgr

+0

संरचना को ब्राउज़र द्वारा पार्स किया गया है (लेआउट गणना शामिल हो सकता है), लेकिन यूआई अभी तक चित्रित नहीं है, यानी, उपयोगकर्ता के लिए दृश्यमान .. यह पालन करना है .. – Nrj

5

दस्तावेज़ लोड हो रहा है पूरा करने के बाद।

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

संपादित करें: अपने दूसरे सवाल का जवाब करने के लिए:

आप ब्लॉक में अपने कोड लपेट नहीं है, तो ऊपर तो यह निकाल देते थे जैसे ही यह बजाय का सामना करना पड़ा है यह इस लेखन के रूप में ही है पृष्ठ पर सभी नियंत्रण लोड होने के बाद। तो यदि कोई पृष्ठ किसी पृष्ठ के शीर्ष पर था और यह पृष्ठ के तत्वों को संदर्भित करता है तो वे संदर्भ काम नहीं करेंगे क्योंकि तत्व अभी तक लोड नहीं हुए हैं।

लेकिन यदि आप ब्लॉक में लपेटते हैं तो आप जानते हैं कि पृष्ठ लोड हो गया है और सभी तत्व अब संदर्भ के लिए उपलब्ध हैं।

+7

यह वास्तव में होता है ** ** ** से पहले पूरा दस्तावेज़ लोड हो गया है; यह तब होता है जब डोम तैयार होता है। – VoteyDisciple

+0

@ वोटी आप सही हैं। मुझे और अधिक स्पष्ट होना चाहिए था। ज्यादातर मामलों में आमतौर पर कोई मुद्दा नहीं होता है लेकिन कई बार ऐसा हो सकता है जब यह एक महत्वपूर्ण भेद हो। – spinon

30

यह तब काम करता है जब दस्तावेज़ को पार्स किया गया है और तैयार है, और $(document).ready(function() { }) के बराबर है।

स्पष्ट लाभ यह है कि पृष्ठ पर अन्य तत्वों के सामने आपकी स्क्रिप्ट टैग होने का अर्थ है कि आपकी स्क्रिप्ट उनके साथ बातचीत कर सकती है भले ही वे पार्स समय पर उपलब्ध न हों। यदि तत्वों को पार्स किए जाने से पहले आप अपनी स्क्रिप्ट चलाते हैं और दस्तावेज़ तैयार नहीं होता है, तो वे बातचीत के लिए उपलब्ध नहीं होंगे।

3

यह दस्तावेज पूरी तरह से लोड होने के बाद आग लग जाता है, डीओएम पेड़ शुरू किया गया है, सभी सीएसएस शैलियों को लागू किया गया है और सभी जावास्क्रिप्ट को निष्पादित किया गया है। यह उन तत्वों (सीएसएस/जेएस के अलावा) में load ईवेंट से अलग है जो अन्य सामग्री जैसे छवियों या फ्लैश फाइलों से अपनी सामग्री लोड करते हैं, इस बिंदु पर लोडिंग आवश्यक रूप से लोड नहीं हो चुके हैं। इसे आमतौर पर "डोमरेडी" या "डोमलोडेड" ईवेंट कहा जाता है, और कुछ आधुनिक ब्राउज़र सीधे इसका समर्थन करते हैं (जैसे फ़ायरफ़ॉक्स में डोमकंटेंट लोडेड इवेंट है), और दूसरों पर इसे defer विशेषता का उपयोग करने या स्क्रिप्ट रखने जैसे विभिन्न चालों के साथ अनुकरण किया जा सकता है। शरीर के बहुत अंत में।

लाभ यह है कि आप इस समय दस्तावेज़ के साथ विश्वसनीय रूप से बातचीत कर सकते हैं; उदाहरण के लिए आप एक निश्चित आईडी के साथ एक तत्व पर एक ईवेंट हैंडलर सेट कर सकते हैं और सुनिश्चित कर सकते हैं कि यह पहले से ही डीओएम पेड़ में मौजूद है। दूसरी तरफ, लोड लोड की तुलना में यह काफी पहले चला सकता है, अगर कुछ बाहरी संसाधन लोड होने में धीमा है। यदि आपकी स्क्रिप्ट आपके एचटीएमएल कोड के अंत में है, तो डोमरेड इवेंट का उपयोग करने या नहीं करने में थोड़ा अंतर हो सकता है, लेकिन आमतौर पर स्क्रिप्ट को head टैग से बुलाया जाता है, और उस समय शरीर के कोई तत्व अभी तक उपलब्ध नहीं हैं।

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

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