সমস্ত কিছু লোড না হওয়া পর্যন্ত একটি জ্যাকুরি স্ক্রিপ্ট বিলম্ব করা


111

আমার একটি jquery স্ক্রিপ্ট রয়েছে যা পৃষ্ঠায় অন্য কিছু জাভাস্ক্রিপ্ট (যার উপর আমার কোনও নিয়ন্ত্রণ নেই) সহ সমস্ত কিছু কেবল একবার চালানো দরকার যা তাদের কাজ শেষ করেছে।

আমি যদিও সম্ভবত $ (ডকুমেন্ট) এর বিকল্প ছিল। প্রস্তুত কিন্তু আমি এটি সন্ধান করতে পারিনি।

উত্তর:


217

আপনার $(document).ready()একটি পৃষ্ঠায় একাধিকবার থাকতে পারে । কোডটি ক্রম হিসাবে এটি প্রদর্শিত হয় চালানো হয়।

$(window).load()পৃষ্ঠাটি পুরোপুরি লোড হওয়ার পরে এবং বিভিন্ন $(document).ready()হ্যান্ডলারের সমস্ত কোড চলমান শেষ হওয়ার পরে এটি ঘটায় আপনি আপনার কোডটির জন্য ইভেন্টটি ব্যবহার করতে পারেন ।

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

1
আমি কি এই পদ্ধতিটি ব্যবহার করে বাহ্যিক স্ক্রিপ্টগুলি আমদানি করতে পারি?
ক্রিসমাস

1
অবশ্যই, আপনি যদি ইতিমধ্যে $ (দস্তাবেজ) .ডিডি () এর ভিতরে এটি করে থাকেন তবে এটি আলাদা হবে না।
হোসে বাসিলিও

7
এই উত্তরটি আমার পক্ষে কার্যকর ছিল কারণ আমি বুঝতে পারি নি যে
জ্যাকারি কোডটি

1
তোমাকে অনেক ধন্যবাদ! এটি আমার। উচ্চতা () ইস্যুটি ঠিক করেছে যেখানে এটি সঠিক উচ্চতা পাচ্ছে না কারণ পৃষ্ঠাটি (দৃশ্যত) এখনও লোড হয়নি।
জন

6
JQuery 3.0 এ, the $(window).on('load', function() { });(উইন্ডো)। লোড () অবমূল্যায়ন করা হওয়ায় আপনার সিনট্যাক্সটি ব্যবহার করা উচিত ।
অ্যালেক্স এইচ

13

এই কোড ব্লকটি আমার সমস্যার সমাধান করে,

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


JQuery ইতিমধ্যে লোড হয়েছে কিনা তা দেখতে আপনি কীভাবে একটি jQuery ফাংশন পরিচালনা করতে পারেন? এটি তখনই কাজ করবে যখন পরীক্ষার আগে 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>

3

থেকে এখানে :

// 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> 

এটি কেবল jQuery লোড না হওয়া অবধি অপেক্ষা করবে এবং পৃষ্ঠার অন্যান্য দিকগুলি উপেক্ষা করবে। গ্রীসমনকি-র পুরানো সংস্করণগুলির জন্য এটি হ্যাক ছাড়া আর কিছুই নয় যা @ প্রয়োজনীয় নির্দেশনাটি সমর্থন করে না।
চেকিসফট

1
আমি অন্যান্য কোডটি লোড না হওয়া পর্যন্ত অপেক্ষা করার জন্য কীভাবে jQuery এর সাথে একই ধারণাটি ব্যবহার করেছি তার উদাহরণ হিসাবে আমি আমার কোড যুক্ত করেছি।
ক্রিস ডগগেট

1

দেখা যাচ্ছে যে জাভাস্ক্রিপ্ট ফ্রেমওয়ার্কগুলির একটি অদ্ভুত মিশ্রণের কারণে যা অন্য ফ্রেমওয়ার্কগুলির মধ্যে একটি দ্বারা সরবরাহ করা ইভেন্ট শ্রোতার সাহায্যে আমার স্ক্রিপ্টটি শুরু করা প্রয়োজন।


3
খুশি যে আপনি একটি সমাধান পেয়েছেন তবে আপনার উত্তরটি অন্য বিবরণ ছাড়া অন্যদের পক্ষে কার্যকর নয় ...
অ্যান্ড্রু

1

আপনি $().readyশেষটি যে jQuery ফাংশনটি চেয়েছিলেন তা ব্যবহার করে আপনি কি সমস্ত সূচনা ফাংশন লোড করার চেষ্টা করেছেন ?

সম্ভবত আপনি ব্যবহার করতে পারেন setTimeout()উপর$().ready ফাংশনটি চালাতে চেয়েছিলেন তাতে আপনি যে ফাংশনটি লোড করতে চেয়েছিলেন তা কল করে আপনি ।

অথবা, setInterval()সমস্ত অন্যান্য লোড ফাংশন সম্পন্ন হয়েছে কিনা তা জানতে (ইন্টারন্যাশনাল বুলিয়ান ভেরিয়েবলে সংরক্ষণ করুন) ব্যবহার করুন এবং অন্তর পরীক্ষা করুন। যখন শর্ত পূরণ হয়, আপনি অন্তর বাতিল করতে এবং লোড ফাংশন চালাতে পারেন।


আপনি এটার অর্থ কী তা আমি নিশ্চিত নই। আপনি কি পরামর্শ দিচ্ছেন যে আমি jquery স্ক্রিপ্টের মাধ্যমে সমস্ত স্ক্রিপ্টগুলি আমদানি করব এবং আমার স্ক্রিপ্টটি শেষ রাখি? যদি তাই হয় তবে কেমন হবে (আমি ব্যবসায়ের দ্বারা ডিজাইনার, তাই বড় শব্দ ব্যবহার করবেন না :))
ক্রিসমাস

document (ডকুমেন্ট) .ডিআর (ফাংশন () {কললোয়াড ফাংশন 1 (); কললয়েড ফাংশন 2 (); কলজকুইআরএলআউড ফাংশন ();});
রিচার্ড ক্লেটন

অন্যান্য স্ক্রিপ্টগুলি সমস্ত বাহ্যিক ফাইল তাই আমি নিশ্চিত না যে এটি কাজ করবে?
ক্রিসমাস

@ ক্রিসম: আমার দ্বিতীয় উদাহরণ দেখুন। ভেরিয়েবলগুলি অন্য বাহ্যিক জেএস ফাইলগুলি কিছু করার আগেই লোড হয়েছে তা নির্দেশ করে ততক্ষণ অপেক্ষা করে। আপনি আমার জেএস_ডিআর () পদ্ধতিতে সর্বশেষে যে কোডটি চালাতে চান তা কেবল রেখে দিয়েছেন। এটি আপনি যা খুঁজছেন ঠিক তা করে।
ক্রিস ডগগেট

2
কেবল ব্যবহার করুন$(window).load(function(){...})
রায়ান টেলর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.