क्या $ (दस्तावेज़) पहले से ही आवश्यक है?


111

मैंने इस प्रश्न को स्टैकओवरफ़्लो में देखा था लेकिन ऐसा नहीं लगता कि इसका उत्तर दिया गया था।

है $(document).readyआवश्यक?

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


3
पुराने ब्राउज़र समानांतर डाउनलोडिंग का आनंद नहीं ले सकते जो नए ब्राउज़र काम करते हैं। यह मुख्य कारण है कि आपकी स्क्रिप्ट को नीचे रखा गया है। यह विशेष रूप से आपके HTML और CSS को पहले पुराने ब्राउज़रों पर प्रदान करने की अनुमति देता है। इस बिंदु पर, आपके पास यह सुनिश्चित करने का विकल्प है कि आप यह कैसे पूरा करना चाहते हैं कि डोम लोड हो रहा है। अपने js को बंद करने के लिए दो लोकप्रिय तरीके हैं window.onload & $ (document)। पहले से ही (jQuery के साथ संयोजन के रूप में)। अन्य विकल्प हैं और आसानी से खोजे जा रहे हैं, स्पष्ट रूप से विंडो.ऑन लोड के लिए डाउनसाइड। बिंदु $ (दस्तावेज़) है। पहले से ही अधिक बार काम करता है न कि उपयोग करना आसान है।
ब्रैडकिसेनी79

जवाबों:


125

है $(document).readyआवश्यक?

नहीं

यदि आपने अपने सभी लिपियों को </body>समापन टैग से ठीक पहले रखा है , तो आपने ठीक वही काम किया है।

इसके अतिरिक्त, यदि स्क्रिप्ट को DOM तक पहुंचने की आवश्यकता नहीं है, तो यह मायने नहीं रखेगा कि यह अन्य स्क्रिप्ट पर संभावित निर्भरता से अधिक कहाँ लोड है।

कई सीएमएस के लिए, आपके पास जहां स्क्रिप्ट लोड होने की अधिक संभावना नहीं होती है, इसलिए यह document.readyइवेंट का उपयोग करने के लिए मॉड्यूलर कोड के लिए अच्छा रूप है । क्या आप वास्तव में वापस जाना चाहते हैं और पुराने कोड को डिबग करेंगे यदि आप इसे कहीं और फिर से उपयोग करते हैं?

विषय से परे:

एक साइड नोट के रूप में: आपको jQuery(function($){...});इसके बजाय उपयोग करना चाहिए $(document).ready(function(){...});क्योंकि यह उपनाम को मजबूर करता है $


क्या आपको यकीन है कि इसकी "बिल्कुल वही बात" है? मैं इस धारणा के अधीन था कि आपका सीएसएस (या मुख्य HTML के समानांतर अन्य कोड लोड) अभी पूरी तरह से पार्स नहीं किया जा सकता है।
Zach Lysobey

6
@ZachL, CSS पूरी तरह से पार्स होने से पहले दस्तावेज़ तैयार हो सकता है। document.ready समान नहीं है के रूप में onloadघटना है, जहां छवियों और अन्य बाहरी संपत्ति समाप्त लोड हो रहा है है।
zzzzBov

स्पष्टीकरण के लिए धन्यवाद।
Zach Lysobey

5
यह "नहीं" बस मुझे काम के 3 घंटे खर्च करता है .. बस सुनिश्चित करें कि आप गलती न करें </ body> <body> के साथ :)
teejay

1
मैं आवश्यक रूप से उर्फ ​​को मजबूर करने से सहमत नहीं हूं, खासकर यदि noConflict()किसी कारण से उपयोग करने की आवश्यकता है।
Jay Blanchard

22

नहीं, यदि आपकी जावास्क्रिप्ट अंतिम चीज है तो बंद होने से पहले आपको उन टैगों को जोड़ने की आवश्यकता नहीं होगी।

साइड नोट के रूप में, $ (दस्तावेज़) के लिए एक शॉर्टहैंड पहले से ही नीचे दिया गया कोड है।

$(function() {
// do something on document ready
});

यह सवाल अच्छा हो सकता है। क्या तुमने इसे पढ़ा? jQuery: पृष्ठ के निचले भाग में बाहरी JS के लिए document.ready का उपयोग क्यों करें?


6
सवाल अनिवार्य रूप से है "क्या मुझे अपने स्क्रिप्ट को शरीर के निचले हिस्से में रखने पर दस्तावेज़ तैयार करने की आवश्यकता है?", "क्या लिखने का कोई शॉर्टकट तरीका नहीं है $(document).ready()"।
nnnnnn

4

नहीं, यह आवश्यक नहीं है कि आप जानते हैं कि आपके पास कोई स्थगित सामान नहीं है - और ज्यादातर मामलों में आपको पता चल जाएगा कि क्या आपने विकसित किया है जो आप ऊपर से नीचे तक काम कर रहे हैं।

- यह है जब आप किसी और के कोड में लाते हैं, बिना पूरी तरह से ऑडिट किए, कि आपको पता नहीं है।

तो, अपने आप से पूछें कि क्या आप एक ढांचे या संपादक का उपयोग कर रहे हैं जो आपको संरचना में मदद करता है? क्या आप किसी और के कोड में ला रहे हैं और आपने प्रत्येक फ़ाइल के माध्यम से पढ़ने की जहमत नहीं उठाई है? क्या आप अपने कोड के परीक्षण के ऑपरेटिंग सिस्टम, ब्राउज़र और ब्राउज़र संस्करण मैट्रिक्स से गुजरने के लिए तैयार हैं? क्या आपको अपने कोड से गति के हर एक औंस को निचोड़ने की आवश्यकता है?

document.ready () उन सवालों में से कई को अप्रासंगिक बना देता है। document.ready () को आपके जीवन को आसान बनाने के लिए डिज़ाइन किया गया था। यह एक छोटे (और मैं स्वीकार्य कहने की हिम्मत करता हूं) प्रदर्शन हिट पर आता है।


बस कुछ मैंने देखा - आपका एक संपादन अस्वीकृत हो गया, लेकिन यह मुझे ठीक लग रहा है। आप चाहते हैं कि एक को फिर से जमा करें: stackoverflow.com/review/suggested-edits/3224385
Qantas 94 हैवी

1

मैंने jquery के उपयोग के संबंध में इंटरनेट पर संदर्भ / ब्लॉग पोस्ट देखी है document.ready। मेरी राय में इसका उपयोग करना या पृष्ठ के निचले भाग में अपनी सभी जावास्क्रिप्ट डालना दोनों ही मान्य हैं। और अब सवाल यह होगा कि कौन सा बेहतर होगा? यह सिर्फ प्रोग्रामिंग स्टाइल की बात है।


0

नहीं, यह आवश्यक नहीं है। आप या तो स्क्रिप्ट टैग को बॉडी क्लोजिंग टैग से ठीक पहले लगा सकते हैं या यदि आप IE9 + का समर्थन कर रहे हैं तो आप देशी JS का उपयोग कर सकते हैं।

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.