2009-06-18 27 views
87

मेरे पास एक jquery स्क्रिप्ट है जिसे मुझे पृष्ठ पर अन्य सभी चीज़ों को चलाने के लिए केवल एक बार चलाने की आवश्यकता है, जिसमें कुछ अन्य जावास्क्रिप्ट (जिन पर मेरा कोई नियंत्रण नहीं है) ने अपनी बात पूरी कर ली है।जब तक कि बाकी सब कुछ लोड नहीं हो जाता है, तब तक एक jquery स्क्रिप्ट को देरी

हालांकि शायद $ (दस्तावेज़) का विकल्प था। लेकिन मैं इसे खोजने में सक्षम नहीं हूं।

उत्तर

1

ऐसा नहीं है कि की एक अजीब मिश्रण की वजह से पता चला है जावास्क्रिप्ट ढांचे जो मुझे एक घटना श्रोता का उपयोग करके स्क्रिप्ट को शुरू करने के लिए आवश्यक है, जो अन्य ढांचे में से एक द्वारा प्रदान किया जाता है।

1

क्या आपने $().ready का उपयोग करके सभी प्रारंभिक कार्यों को लोड करने का प्रयास किया है, जो आप चाहते थे कि jQuery फ़ंक्शन चला रहा हो?

शायद आपपर $().ready फ़ंक्शन का उपयोग कर सकते हैं जिसे आप चलाने के लिए चाहते थे, उस कार्यक्षमता को बुलाएं जिसे आप लोड करना चाहते थे।

या, setInterval() का उपयोग करें और अंतराल जांच करें कि यह देखने के लिए कि क्या अन्य सभी लोड फ़ंक्शंस पूरा हो गए हैं (एक बूलियन चर में स्थिति संग्रहीत करें)। जब शर्तों को पूरा किया जाता है, तो आप अंतराल को रद्द कर सकते हैं और लोड फ़ंक्शन चला सकते हैं।

+0

मुझे यकीन है कि आप इस से क्या मतलब है नहीं कर रहा हूँ। क्या आप सुझाव दे रहे हैं कि मैं एक jquery स्क्रिप्ट के माध्यम से सभी स्क्रिप्ट आयात करता हूं और बस अपनी स्क्रिप्ट को आखिरी बार रखता हूं? यदि ऐसा है तो यह कैसा दिखता है (मैं व्यापार द्वारा डिजाइनर हूं, इसलिए बड़े शब्दों का उपयोग न करें :)) – chrism

+0

$ (दस्तावेज़)।तैयार (फ़ंक्शन() { कॉललोड लोड 1(); कॉललोड लोड 2(); calljQueryLoadFunction(); }); –

+0

अन्य स्क्रिप्ट सभी बाहरी फाइलें हैं इसलिए मुझे यकीन नहीं है कि यह काम करेगा? – chrism

188

आपके पास पृष्ठ में $(document).ready() कई बार हो सकता है। कोड अनुक्रम में चलाया जाता है जिसमें यह प्रतीत होता है।

आप अपने कोड के लिए $(window).load() ईवेंट का उपयोग कर सकते हैं क्योंकि यह पृष्ठ पूरी तरह से लोड होने के बाद होता है और विभिन्न $(document).ready() हैंडलर के सभी कोड चलने समाप्त हो गए हैं।

$(window).load(function(){ 
    //your code here 
}); 
+1

क्या मैं इस विधि का उपयोग कर बाहरी स्क्रिप्ट आयात कर सकता हूं? – chrism

+1

निश्चित रूप से, यदि आप पहले से ही $ (दस्तावेज़) .ready() के अंदर ऐसा कर रहे हैं, तो यह अलग नहीं होगा। –

+7

यह उत्तर मेरे लिए उपयोगी था क्योंकि मुझे एहसास नहीं हुआ कि jQuery कोड अनुक्रम में चलाया जाता है – Sevenearths

3
here से

:

// Add jQuery 
var GM_JQ = document.createElement('script'); 
GM_JQ.src = 'http://jquery.com/src/jquery-latest.js'; 
GM_JQ.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(GM_JQ); 

// Check if jQuery's loaded 
function GM_wait() 
{ 
    if(typeof unsafeWindow.jQuery == 'undefined') 
    { 
     window.setTimeout(GM_wait,100); 
    } 
    else 
    { 
     $ = unsafeWindow.jQuery; 
     letsJQuery(); 
    } 
} 

GM_wait(); 

// All your GM code must be inside this function 
function letsJQuery() 
{ 
    // Do your jQuery stuff in here  
} 

यह जब तक jQuery इसका इस्तेमाल करने की भरी हुई है इंतजार करेंगे, लेकिन आप (अपने अन्य लिपियों में चर स्थापित करने या उन्हें पता चल सके कि वे कर रहे हैं इसी सिद्धांत का उपयोग कर सकते हैं, आपकी स्क्रिप्ट नहीं) जब तक उन्हें उपयोग करने के लिए लोड नहीं किया जाता है तब तक प्रतीक्षा करें।

उदाहरण के लिए, अपनी साइट पर, मैं इस अतुल्यकालिक जे एस लोड करने के लिए इस्तेमाल करते हैं और इंतजार कर रहे हैं जब तक वे उनके साथ कुछ भी कर रही है jQuery उपयोग करने से पहले समाप्त कर लें:

<script type="text/javascript" language="JavaScript"> 
    function js(url){ 
     s = document.createElement("script"); 
     s.type = "text/javascript"; 
     s.src = url; 
     document.getElementsByTagName("head")[0].appendChild(s); 
    }  

    js("/js/jquery-ui.js"); 
    js("/js/jrails.js"); 
    js("/js/jquery.jgrowl-min.js"); 
    js("/js/jquery.scrollTo-min.js"); 
    js("/js/jquery.corner-min.js"); 
    js("/js/jquery.cookie-min.js"); 
    js("/js/application-min.js"); 

    function JS_wait() { 
     if (typeof $.cookie == 'undefined' || // set in jquery.cookie-min.js 
      typeof getLastViewedAnchor == 'undefined' || // set in application-min.js 
      typeof getLastViewedArchive == 'undefined' || // set in application-min.js 
      typeof getAntiSpamValue == 'undefined') // set in application-min.js 
     { 
      window.setTimeout(JS_wait, 100); 
     } 
     else 
     { 
      JS_ready(); 
     } 
    } 

    function JS_ready() { 
     // snipped 
    }; 

    $(document).ready(JS_wait); 
</script> 
+0

यह केवल तब तक प्रतीक्षा करेगा जब तक कि jQuery लोड नहीं होता है और पृष्ठ के अन्य पहलुओं को नजरअंदाज करता है। यह greasemonkey के पुराने संस्करणों के लिए एक हैक से अधिक कुछ नहीं है जो @require निर्देश का समर्थन नहीं करता है। – Cheekysoft

+1

मैंने अपने कोड को एक उदाहरण के रूप में जोड़ा है कि मैंने jQuery के साथ एक ही अवधारणा का उपयोग कैसे किया है जब तक अन्य कोड लोड नहीं हो जाता है। –

11

एकाधिक $(document).ready() पेज पर शीर्ष पर क्रमशः आग लग जाएगा। अंतिम $(document).ready() पृष्ठ पर आखिरी बार आग लगाएगा। अंतिम $(document).ready() के अंदर, आप अन्य सभी के बाद आग लगाने के लिए एक नया कस्टम ईवेंट ट्रिगर कर सकते हैं ..

नए कस्टम ईवेंट के लिए ईवेंट हैंडलर में अपना कोड लपेटें।

<html> 
<head> 
<script> 
    $(document).on("my-event-afterLastDocumentReady", function() { 
     // Fires LAST 
    }); 
    $(document).ready(function() { 
     // Fires FIRST 
    }); 
    $(document).ready(function() { 
     // Fires SECOND 
    }); 
    $(document).ready(function() { 
     // Fires THIRD 
    }); 
</script> 
<body> 
... other code, scripts, etc.... 
</body> 
</html> 

<script> 
    $(document).ready(function() { 
     // Fires FOURTH 
     // This event will fire after all the other $(document).ready() functions have completed. 
     // Usefull when your script is at the top of the page, but you need it run last 
     $(document).trigger("my-event-afterLastDocumentReady"); 
    }); 
</script> 
5

इस कोड को ब्लॉक मेरी समस्या का समाधान,

<script type="text/javascript"> 
 
    $(window).bind("load", function() { 
 
    // Code here 
 
    }); 
 
</script>

+0

यह देखने के लिए कि क्या jQuery पहले ही लोड हो चुका है, आप एक jQuery फ़ंक्शन कैसे चला सकते हैं? यह तभी काम करेगा जब जांच से पहले jQuery लोड हो गया हो। – HelpNeeder

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

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