2011-03-10 14 views
305

प्रश्न:

यदि मैं दो जावास्क्रिप्ट फ़ाइलों में लिंक करता हूं, तो $(document).ready कार्यों के साथ, क्या होता है? क्या कोई दूसरे को ओवरराइट करता है? या $(document).ready दोनों को कॉल किया जाता है?

उदाहरण के लिए,

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 

<script type="text/javascript" src="http://.../jquery1.js"></script> 

<script type="text/javascript" src="http://.../jquery2.js"></script> 

jquery1.js:

$(document).ready(function(){ 
    $("#page-title").html("Document-ready was called!"); 
}); 

jquery2.js:

$(document).ready(function(){ 
    $("#page-subtitle").html("Document-ready was called!"); 
}); 


मुझे यकीन है कि यह सबसे अच्छा अभ्यास बस दोनों गठबंधन करने के लिए है एक $(document).ready में कॉल करता है लेकिन इसमें काफी संभव नहीं है मेरी स्थिति।

उत्तर

293

सभी को निष्पादित किया जाएगा और पहले पहले रन के आधार पर कॉल किया जाएगा !!

<div id="target"></div> 

<script> 
    $(document).ready(function(){ 
    jQuery('#target').append('target edit 1<br>'); 
    }); 
    $(document).ready(function(){ 
    jQuery('#target').append('target edit 2<br>'); 
    }); 
    $(document).ready(function(){ 
    jQuery('#target').append('target edit 3<br>'); 
    }); 
</script> 

Demo

इसके अलावा एक बात मैं चाहते हैं इस

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

के स्थान पर

उल्लेख करने के लिए आप इस शॉर्टकट का उपयोग कर सकते

jQuery(function(){ 
    //dom ready codes 
}); 
+59

या यहां तक ​​कि छोटे $ (फ़ंक्शन() { // डोम तैयार कोड }); http://api.jquery.com/ready/ – davehale23

+167

$ (फ़ंक्शन() {// do stuff}) को याद रखना याद रखें; पहली बार, और Google को स्पष्टीकरण कितना मुश्किल था? $ (दस्तावेज़)। पहले से ही बहुत कम के लिए संचारित करता है ... –

+12

मैं @MattM से सहमत हूं। मैं किसी भी दिन पठनीयता के लिए वोट देता हूं। – pqsk

18

निष्पादन शीर्ष-नीचे है। पहले आओ पहले पाओ।

यदि निष्पादन अनुक्रम महत्वपूर्ण है, तो उन्हें गठबंधन करें।

30

$ (दस्तावेज़) .ready(); किसी भी अन्य समारोह के समान है। दस्तावेज़ तैयार होने के बाद यह आग लगती है - यानी लोड हो जाती है। सवाल क्या होता है जब एक से अधिक $ (document) .ready() के बारे में है की जब आप एकाधिक $ के भीतर एक ही समारोह आग नहीं निकाल दिया जाता है (document) .ready() के

//this 
<div id="target"></div> 

$(document).ready(function(){ 
    jQuery('#target').append('target edit 1<br>'); 
}); 
$(document).ready(function(){ 
    jQuery('#target').append('target edit 2<br>'); 
}); 
$(document).ready(function(){ 
    jQuery('#target').append('target edit 3<br>'); 
}); 

//is the same as 
<div id="target"></div> 

$(document).ready(function(){ 

    jQuery('#target').append('target edit 1<br>'); 

    jQuery('#target').append('target edit 2<br>'); 

    jQuery('#target').append('target edit 3<br>'); 

}); 

दोनों वास्तव में व्यवहार करेंगे वही। केवल अंतर यह है कि हालांकि पूर्व एक ही परिणाम प्राप्त करेंगे। उत्तरार्द्ध एक दूसरे के तेजी से एक अंश चलाएगा और कम टाइपिंग की आवश्यकता होगी। :)

निष्कर्ष में जहां कहीं भी संभव हो केवल 1 $ (दस्तावेज़) .ready();

// पुराना उत्तर

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

+0

^^ मेरा संपादित किया गया क्योंकि मैंने सोचा था कि लोग एक ही फ़ंक्शन को कई बार चलाने और कई $ (दस्तावेज़) में अलग-अलग फ़ंक्शंस चलाने के बीच भ्रमित हो सकते हैं। ^^ उम्मीद है कि इससे मदद मिलती है । –

8

दोनों को कॉल किया जाएगा, पहले पहले सेवा की जाएगी। here पर एक नज़र डालें।

$(document).ready(function(){ 
    $("#page-title").html("Document-ready was called!"); 
    }); 

$(document).ready(function(){ 
    $("#page-title").html("Document-ready 2 was called!"); 
    }); 

आउटपुट:

दस्तावेज़ के लिए तैयार 2 बुलाया गया था!

68

यह ध्यान रखना महत्वपूर्ण है कि प्रत्येक jQuery() कॉल वास्तव में वापस आना चाहिए। यदि एक अपवाद को एक में फेंक दिया जाता है, तो बाद में (असंबद्ध) कॉल कभी निष्पादित नहीं की जाएंगी।

यह वाक्यविन्यास पर ध्यान दिए बिना लागू होता है। आप jQuery(), jQuery(function() {}), $(document).ready() का उपयोग कर सकते हैं, जो भी आप चाहें, व्यवहार समान है। यदि कोई प्रारंभिक व्यक्ति विफल रहता है, तो बाद के ब्लॉक कभी नहीं चलेंगे।

तृतीय-पक्ष पुस्तकालयों का उपयोग करते समय यह मेरे लिए एक समस्या थी। एक पुस्तकालय एक अपवाद फेंक रहा था, और बाद के पुस्तकालयों ने कभी भी कुछ शुरू नहीं किया।

+0

यह। मैंने अभी इस मुद्दे पर एक समस्या को कम करने के लिए एक अच्छा घंटा बिताया है। मेरे '$ (दस्तावेज़) में से एक .ready' कॉल ने एक त्रुटि फेंक दी और इसलिए एक अलग' $ (दस्तावेज़) .ready' फ़ंक्शन कभी नहीं बुलाया गया। यह मुझे पागल कर रहा था। – scrollup

+3

यह अब मामला नहीं है। JQuery 3.0 के अनुसार, jQuery सुनिश्चित करता है कि एक हैंडलर में होने वाला एक अपवाद बाद में जोड़े गए हैंडलर को निष्पादित करने से रोकता नहीं है। http://api.jquery.com/ready/ –

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