2012-05-01 17 views
18

अगर मैं अपने सभी पेज HTML के नीचे अपनी jQuery स्क्रिप्ट लोड कर रहा हूं, तो क्या मुझे पृष्ठ में तत्वों को खोजने के लिए jQuery का उपयोग करने में सक्षम होने के लिए अभी भी $(document).ready का इंतजार करना होगा?

+0

"तकनीकी रूप से", हाँ - "व्यावहारिक रूप से", नहीं है। यह वर्षों से ब्राउज़रों के लिए लगातार (गैर परिभाषित) व्यवहार रहा है। हालांकि, मेरा मानना ​​है कि आईई में 'तैयार' और फ्रेम के साथ कुछ जादू हो सकता है ... स्क्रिप्ट अभी भी * शरीर टैग के अंदर * होनी चाहिए। –

+0

इसके अलावा, "पाद लेख" का अर्थ '

'या' 'या ... के अंत में होता है? –

+0

'' –

उत्तर

1

आप को jQuery के ready फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है, लेकिन आपके कोड को इसके साथ दिमाग में लिखा जाना होगा। कोई भी click या अन्य बाइंड-आधारित हैंडलर चयनकर्ताओं को सही ढंग से संलग्न नहीं कर सकते हैं, हालांकि, live और $.ajax जैसे अन्य लोग इरादे से कार्य कर सकते हैं।

इस दृष्टिकोण का उपयोग करते हुए स्क्रिप्ट लोडर या एएमडी का उपयोग करते समय सावधान रहें। jQuery उपलब्ध होना चाहिए और लोड होने पर आपको ब्लॉक करना होगा। सिर में jQuery और अन्य deps लोड करें।

इस तकनीक में एक महान देखो जो बताती है कि यह कार्य करने के लिए jQuery के लिए उपयोग करने के लिए आवश्यक नहीं है (जरूरी नहीं पाद लेख में उपयोग के बारे में):

http://encosia.com/dont-let-jquerys-document-ready-slow-you-down/

+1

'क्लिक करें '(या चयनकर्ता) क्यों काम नहीं करेंगे? –

+0

(वह लिंक हेड-स्थिति में स्क्रिप्ट का उपयोग करने के बारे में बात करता है, लेकिन फूट-स्थिति नहीं।) –

+0

यह निष्पादन से पहले डीओएम में उपलब्ध कुछ भी के लिए काम करेगा। बाद में लोड किया गया कुछ भी, किसी भी माध्यम से, जैसे कि AJAX या बाद के दस्तावेज़ परिवर्तन में जोड़ा गया, jQuery के 'क्लिक' – philwinkle

5

नहीं, तुम किसी के लिए $(document).ready की जरूरत नहीं है कोड जो पृष्ठ पर डीओएम तत्वों के साथ इंटरैक्ट करता है यदि स्क्रिप्ट इन तत्वों के नीचे रखी जाती है।

</body> टैग बंद करने से पहले उन्हें रखना अच्छा अभ्यास है।

+0

एचटीएमएल टैग में केवल दो वैध बच्चे, सिर और शरीर हैं, इसलिए शायद मैं कहूंगा कि यह आपके स्क्रिप्ट टैग को बंद करने वाले बॉडी टैग में रखने के लिए अच्छा अभ्यास है। पार्सर्स अमान्य HTML – Hazza

5

नहीं क्योंकि दस्तावेज़ पहले ही लोड हो चुका था। डोम ऊपर से नीचे लोड करता है। मैं व्यक्तिगत रूप से अपने सभी जेएस को सिर के बजाए पृष्ठ के नीचे रखना चाहता हूं।

हालांकि यह कोड की केवल 1 पंक्ति है और मैं इसे सुरक्षित रखने के लिए इसका उपयोग करने का सुझाव दूंगा। आप इसे भी कम कर सकते हैं। $(function() {}$(document).ready(function(){})

+1

के साथ अजीब हो सकते हैं मुझे समझ में नहीं आता कि आपको सुरक्षित होने के लिए इसका उपयोग क्यों करना चाहिए; ऐसा लगता है जैसे यह अनावश्यक रूप से निष्पादन को धीमा कर देगा। –

+0

क्योंकि हमेशा कुछ ब्राउज़र कॉन्फ़िगरेशन वाले व्यक्ति होंगे जो विफल हो जाएंगे यदि यह नहीं देखता कि यह क्या चाहता है या अपेक्षा करता है। चल रहा है '$ (फ़ंक्शन() {}' एक बार आपके लिए देखभाल करने के लिए पर्याप्त चीजें धीमा नहीं करता है। http://stackoverflow.com/questions/8160014/document-ready-check-slows-down-ie और पढ़ें स्वीकार्य उत्तर के लिए टिप्पणियां। '$ (फ़ंक्शन() {}' का उपयोग औसत पर लगभग 2-3ms करने जा रहा है। यदि आप php का उपयोग करते हैं तो आप एक पक्ष नोट पर एक जेएफ बना सकते हैं ताकि आप सभी जेएस को 1 फ़ाइल में डाल सकें 1 '$ (फ़ंक्शन() {}' में या आप इसे जेएस में कर सकते हैं। प्रोग्रामिंग डिज़ाइन पैटर्न में देखें। – Yamiko