2012-06-04 5 views
23

मैं कोडबेज पर काम कर रहा हूं जिसमें कोड के कई ब्लॉक हैं। Document.ready() (jQuery) पर कुछ व्यवहार सेटिंग। क्या यह लागू करने का कोई तरीका है कि किसी विशेष ब्लॉक को किसी अन्य से पहले बुलाया जाता है?jQuery: document.ready() कॉल के निष्पादन के क्रम को लागू करें

पृष्ठभूमि: मुझे स्वचालित परीक्षण वातावरण में जेएस त्रुटियों का पता लगाने की आवश्यकता है, इसलिए मुझे उस कोड की आवश्यकता है जो जेएस त्रुटियों को किसी भी अन्य जेएस कोड निष्पादन से पहले निष्पादित करने के लिए लॉगिंग शुरू कर दे।

+2

क्या त्रुटि कोड लॉगिंग त्रुटि वास्तव में * डीओएम तैयार होने की प्रतीक्षा करने के लिए * की आवश्यकता है? –

+0

@ केविन बी महान बिंदु! यह प्रतीक्षा करने के लिए भी उपयोगी हो सकता है ... – msanford

+0

@ केविन बी मैं जेएस से बहुत परिचित नहीं हूं। अगर मैंने किसी भी ब्लॉक के बाहर कोड रखा है, तो क्या किसी अन्य कोड को निष्पादित करने से पहले इसे चलाने की गारंटी होगी? –

उत्तर

22

document.ready() कॉलबैक को पंजीकृत क्रम में बुलाया जाता है। यदि आप पहले अपना परीक्षण कॉलबैक पंजीकृत करते हैं, तो इसे पहले कहा जाएगा।

यदि आपके परीक्षण कोड को वास्तव में डोम में हेरफेर करने की आवश्यकता नहीं है, तो आप इसे चलाने में सक्षम हो सकते हैं क्योंकि कोड को पार्स किया गया है और जब तक डोम तैयार नहीं होता है तब तक प्रतीक्षा न करें जो अन्य document.ready() कॉलबैक कहने से पहले चलाएगा। या, शायद आप तुरंत अपने परीक्षण कोड का हिस्सा चला सकते हैं और केवल उस भाग को स्थगित कर सकते हैं जो DOM का उपयोग document.ready() तक करता है।

एक और विचार है (परीक्षण प्रयोजनों के लिए केवल) आपको लगता है कि document.ready() करने के लिए एक ध्वज कहा कि जब से पारित कर दिया और true करने के लिए सेट है कि समारोह पहले कॉल करने के लिए संकेत दिया या आप एक नई विधि जोड़ सकते हैं jQuery के एक थोड़ा संशोधित संस्करण के साथ चला सकते हैं document.readyFirst() जो आपके कार्य को पहले कॉल करेगा। इसमें jQuery में document.ready() प्रसंस्करण कोड में मामूली परिवर्तन शामिल होंगे।

+0

@ एंकिटसोनी - आपने 8 महीने बाद सबसे अच्छा जवाब टैग क्यों हटाया? किया बदल गया? – jfriend00

+1

मेरी गलती, इसे वापस जोड़ा गया। इसके विपरीत, मैं फिर से इसका जिक्र कर रहा था क्योंकि यह अभी भी सहायक है! –

0

आप डोमरेडी में लॉगिंग प्रारंभ कोड और लोड में अन्य प्रारंभिकरण निष्पादित कर सकते हैं। या आप अपना खुद का प्रारंभिक प्रबंधक बना सकते हैं जो आपके लॉगिंग को पहले कोड शुरू करता है और फिर अन्य सभी प्रारंभिक कॉलबैक (बशर्ते कि वे आपके प्रबंधक के साथ पंजीकृत हों और jQuery नहीं, जब तक कि आप jQuery को हैक करना न भूलें और वहां से उन्हें निकालें, जो मैं नहीं करता हूं ' टी सलाह)।

6

ऐसा करने के लिए आपको holdReady का उपयोग करने में सक्षम होना चाहिए। जब तक यह आपके तैयार कार्यक्रमों से पहले शामिल होता है, तब तक आप अपना कोड चला सकते हैं और फिर अन्य तैयार घटनाओं को ट्रिगर कर सकते हैं।

7

के रूप में @ jfriend00 उल्लेख है कि ready callbacks are called in the order they were registered.

तो यह कोड शुरुआत पर बुलाया ब्लॉक, तो आप एक कॉलबैक यह में सेट तो यह endmost पर निष्पादित किया जाएगा कर सकते हैं, भले ही।

jQuery(document).ready(function(){ 
    jQuery(document).ready(function(){ 
     // This block will be executed after all ready calls. 
    }); 
}); 
+1

यह विधि वास्तव में काम करती है, लेकिन मैं कल्पना कर सकता हूं कि यह कुछ मामलों में कुछ अजीब परिणाम दे रहा है। इसके अलावा, इसमें कोड गंध है और यह भविष्य को बनाए रखने वाले भविष्य देवताओं के लिए बहुत भ्रमित है। – Edwin

+1

@ एडविन, लेकिन यह एक कामकाजी समाधान है। – Dmitry

+1

बहुत अच्छा समाधान, यहां तक ​​कि jQuery 3 में भी काम करता है। – ViRuSTriNiTy

0

मैं इसी तरह कुछ करने के लिए कोशिश कर रहा था, मैं polyfills कि .ready था() फ़ंक्शन का एक समूह लोड हो रहा था, लेकिन मैं भी अपने ही .ready (था) पृष्ठ पर कि मैं पहली बार निष्पादित की जरूरत हालांकि, पॉलीफिल हेडर में लोड किए गए थे।

मुझे एक .ready() बहुत जल्दी (jQuery लोड के ठीक बाद) होने के कारण एक सरणी से कार्य निष्पादित करने के आसपास एक अच्छा तरीका मिला। क्योंकि यह स्रोत कोड में बहुत जल्दी है, यह है .ready() पहले निष्पादित किया गया है। पृष्ठ के नीचे मैं सरणी में फ़ंक्शंस जोड़ सकता हूं, और इसलिए वे सभी किसी भी पहले से पहले निष्पादित कर सकते हैं।() S।

मैंने इसे एक .beforeReady() फ़ंक्शन में लपेट लिया है और इसे रुचि रखने वाले किसी भी व्यक्ति के लिए jQuery- पहले-तैयार के रूप में गिटहब पर रखा है। https://github.com/aim12340/jQuery-Before-Ready

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