পৃষ্ঠা পুরোপুরি লোড হয়ে গেলে কোনও ফাংশন কীভাবে সম্পাদন করবেন?


306

পৃষ্ঠাটি পুরোপুরি লোড হয়ে গেলে আমার কিছু জাভাস্ক্রিপ্ট কোড চালানো দরকার। এর মধ্যে চিত্রের মতো জিনিস রয়েছে।

আমি জানি আপনি ডিওএম প্রস্তুত কিনা তা পরীক্ষা করতে পারেন তবে পৃষ্ঠাটি পুরোপুরি লোড হওয়ার পরে এটি একই হয় কিনা তা আমি জানি না।


7
সুতরাং, ডিওএম প্রস্তুত কিনা তা আপনি কীভাবে পরীক্ষা করবেন?
ম্যাডস স্কজার্ন

উত্তর:


441

বলা হয় load। এটি ডওম প্রস্তুত হওয়ার আগেই এসেছিল এবং ডওম প্রস্তুতটি প্রকৃত কারণেই তৈরি হয়েছিল যা loadচিত্রগুলির জন্য অপেক্ষা করেছিল।

window.addEventListener('load', function () {
  alert("It's loaded!")
})

3
সুতরাং, কেবল স্পষ্ট করার জন্য (যদি আমি থাকতে পারি), ডিওএম প্রস্তুতের সাথে তুলনা করে, window.onloadযখন প্রতিটি পৃষ্ঠার উপাদান / পুনর্নিবিশ্বে (যেমন * ছবি সহ) বলা হয়। আমি কি সঠিক?
ব্রেকপ্রেক

19
@ ব্র্যাকফ্রেইক: হ্যাঁ :) onloadসমস্ত সংস্থান যা দস্তাবেজের অংশ হিসাবে অপেক্ষা করছে। এটি অবশ্যই ডায়নামিকভাবে তৈরি করা অনুরোধগুলি বাদ দেয় যা নথির নিজেই অংশ নয়, যেমন, একটি এজেএক্স অনুরোধ।
ম্যাচু

3
স্ক্রিপ্টটি পুরোপুরি লোড করা হয়নি
এইচডি ..

যদি আমার স্ক্রিপ্টটি গতিময়ভাবে লোড হতে পারে এবং আমি আমার হ্যান্ডলারটি যুক্ত করার আগে "লোড" ইভেন্টটি ঘটতে পারে তবে কী হবে?
পামেলাস

31
একটি ভাল উপায় হতে পারে addEventListener("load", function(){... })পরিবর্তে মুছে onloadসম্পত্তি।
ব্যবহারকারী4642212

30

সাধারণত আপনি ব্যবহার করতে পারেন window.onloadতবে আপনি লক্ষ্য করতে পারেন যে সাম্প্রতিক ব্রাউজারগুলি window.onloadযখন আপনি পিছনে / ফরোয়ার্ড ইতিহাসের বোতামগুলি ব্যবহার করেন তখন ফায়ার হয় না ।

কিছু লোক এই সমস্যাটি সমাধান করার জন্য অদ্ভুত সংকোচনের পরামর্শ দেয় তবে সত্যিই যদি আপনি কেবল একটি window.onunloadহ্যান্ডলার তৈরি করেন (এমন কি এমন কিছু করেন না যা), এই ব্রাউজারে এই ক্যাচিং আচরণটি অক্ষম করা হবেএমডিসি এই "বৈশিষ্ট্যটি" নথি চমত্কার, কিন্তু কোনো কারণে এখনও ব্যবহার লোক setIntervalএবং অন্যান্য অদ্ভুত হ্যাক।

অপেরার কয়েকটি সংস্করণে একটি বাগ রয়েছে যা আপনার পৃষ্ঠায় নিম্নলিখিত কোথাও যুক্ত করে কাজ করা যেতে পারে:

<script>history.navigationMode = 'compatible';</script>

যদি আপনি কেবল একবার ভিউ একবারে জাভাস্ক্রিপ্ট ফাংশন পাওয়ার চেষ্টা করছেন (এবং DOM লোড শেষ হওয়ার পরেও প্রয়োজন হয় না) তবে আপনি এরকম কিছু করতে পারেন:

<img src="javascript:location.href='javascript:yourFunction();';">

উদাহরণস্বরূপ, আমি লোডিং স্ক্রিনের ক্যাশে একটি খুব বড় ফাইল প্রিললোড করতে এই কৌশলটি ব্যবহার করি:

<img src="bigfile"
onload="this.location.href='javascript:location.href=\'javascript:doredir();\';';doredir();">

এই কৌশলটি কীভাবে কাজ করে কেউ স্পষ্ট করে বলতে পারেন ? আমার জন্য খুব জটিল, দোহ ..
রাজ্জেল

20

সম্পূর্ণতার জন্য, আপনি এটি ডিওএমকন্টেন্টলয়েডের সাথেও আবদ্ধ করতে চাইতে পারেন, যা এখন ব্যাপকভাবে সমর্থিত

document.addEventListener("DOMContentLoaded", function(event){
  // your code here
});

আরও তথ্য: https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded


7
এই উত্তরটি প্রশ্নের মধ্যে যা বলা হয়েছিল তার ঠিক বিপরীত।
মুহাম্মদ বিন ইউসরাত

2
প্রকৃতপক্ষে সমস্ত ডিওএমএল এর সমস্ত নির্ভরতা লোড করার আগে সমস্ত ডিওএমএল সামগ্রী লোড করা হয়ে যাওয়ার সাথে সাথে ডমকন্টেন্টলয়েড ইভেন্টটি ট্রিগার করা হয়। যেহেতু উত্তরগুলির থ্রেডের ব্যবহারকারীরা রেফারেন্স করেছেন $.readyআমি ভেবেছিলাম এটি একটি ভাল অবদান রেখেছিল। BTW। যদিও আমি আপনাকে একাধিক কলব্যাক করার অনুমতি দেয় - যদিও আমি addEventListenerএই loadঅনুষ্ঠানের জন্য-আদর্শবাদীটি ব্যবহার করব :window.addEventListener("load", function(event){ // your code here });
2'18

16

পুরো পৃষ্ঠাটি লোড হওয়ার পরে এটি চালানোর চেষ্টা করুন

জাভাস্ক্রিপ্ট দ্বারা

window.onload = function(){
    // code goes here
};

Jquery দ্বারা

$(window).bind("load", function() {
    // code goes here
});

1
$(window)আমাকে ভাবায় যে এটি jquery হবে - ঠিক? বা আমি কিছু জাভাস্ক্রিপ্ট সিনট্যাক্স বিভ্রান্ত করছি? (আমি জেএসে নতুন)
আজেনডেল

2
$(document).ready();যখন jQuery উপলব্ধ হয় কেবল কেন ব্যবহার করবেন না ?
Andreas

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

11

এই কোড ব্যবহার করে দেখুন

document.onreadystatechange = function () {
  if (document.readyState == "interactive") {
    initApplication();
  }
}

আরও তথ্যের জন্য https://developer.mozilla.org/en-US/docs/DOM/docament. तैयार স্টেট দেখুন


হ্যাঁ, এটি সহায়ক। অনেক অনেক ধন্যবাদ ~
ব্রাভো ইয়েং

2
"interactive"পুরোপুরি বোঝা হয় না। "complete"সম্পূর্ণরূপে লোড হয়েছে
রায়ান ওয়াকার 21

অবশেষে! ধন্যবাদ মিলিয়ন, জ্যাকব এখানে তালিকাভুক্ত অসংখ্য পদ্ধতি ব্যর্থ হয়ে গেছে (সর্বোপরি, একটি রেডিওবটন আপডেট করা হবে, এবং এর ফলে একটি গণনা করা যেতে পারে, তবে বোতামটি টিপে প্রদর্শিত হবে না), আপনার পদ্ধতিটি কৌশলটি কার্যকর করে।
সেকার

8

চিত্র ইত্যাদি সহ সবকিছু লোড হয়ে গেলে উইন্ডো.অনলোড ইভেন্টটি প্রজ্বলিত হবে etc.

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


8

onLoad()ইভেন্টটি ব্যবহার করে জাভাস্ক্রিপ্ট , সম্পাদন করার আগে পৃষ্ঠাটি লোড হওয়ার জন্য অপেক্ষা করবে।

<body onload="somecode();" >

আপনি যদি jQuery ফ্রেমওয়ার্কের নথি প্রস্তুত ফাংশনটি ব্যবহার করেন তবে ডিওএম লোড হওয়ার সাথে সাথে পৃষ্ঠা পৃষ্ঠাগুলি লোড হওয়ার আগে কোডটি লোড হবে:

$(document).ready(function() {
    // jQuery code goes here
});

7

আপনি উইন্ডো.অনলোডটি ব্যবহার করতে চাইতে পারেন , কারণ ডকসগুলি সূচিত করে যে DOM উভয় প্রস্তুত না হওয়া এবং পৃষ্ঠার সমস্ত অন্যান্য সম্পত্তি (চিত্র ইত্যাদি) লোড না হওয়া পর্যন্ত এটি চালিত হয় না।


আহ উজ্জ্বল। ভাল ive এই কাজ। পৃষ্ঠার শেষ চিত্রটি হ'ল: <img src = "imdbupdate.php? Update = ajax" શૈલી = "প্রদর্শন: লুকানো" অনলোড = "উইন্ডো.লোকেশন = 'সিনেমা.পিএপি? Do = প্রশাসক'" /> তবে এটি আমাকে পুনর্নির্দেশ দেয় না
বেন শেলক

...কি? কোনও চিত্র লোড হয়ে গেলে আপনি পুনঃনির্দেশ করতে চান?
ম্যাচু

আপনি কেন এটি চান তা নিশ্চিত নই, তবে এটি পুনর্নির্দেশের কারণ নাও হতে পারে এটি প্রদর্শন: লুকানো, এবং ব্রাউজার এটি দেখানো হবে না বলে এটি লোড করতে বিরত করে না।
ম্যাচু

সম্ভবত এটি কেবল একটি লুকানো চিত্র যা সার্ভারে গুরুত্বপূর্ণ কিছু করে যেমন হিটকে ট্র্যাক করা বা ডিবিতে কিছু করা?
মার্ক নোভাকোভস্কি

আমি এটি পেতে পারি, তবে এটি পুনর্নির্দেশ করা আমার কাছে বোধগম্য নয়। আপনি যদি ব্যবহারকারী এটিতে সময় ব্যয় করতে না চান তবে পৃষ্ঠাটি কেন একেবারেই থাকবে? এবং যদি লক্ষ্যটি লোডে পুনর্নির্দেশ করা হয়, তবে কেন এটি একটি সামগ্রিক পরিচ্ছন্নতার বাস্তবায়ন, কেবল উইন্ডো.অনলোড ইভেন্টটি ব্যবহার করবেন না?
ম্যাচু


2

আধুনিক জাভাস্ক্রিপ্ট (> = 2015) সহ আধুনিক ব্রাউজারগুলিতে type="module"আপনি আপনার স্ক্রিপ্ট ট্যাগে যুক্ত করতে পারেন এবং সেই স্ক্রিপ্টের ভিতরে থাকা সমস্ত কিছুই পুরো পৃষ্ঠা লোড হওয়ার পরে কার্যকর হবে। উদাহরণ:

<script type="module">
  alert("runs after") // Whole page loads before this line execute
</script>
<script>
  alert("runs before")
</script>

এছাড়াও পুরানো ব্রাউজারগুলি nomoduleবৈশিষ্ট্যটি বুঝতে পারবে । এটার মতো কিছু:

<script nomodule>
  alert("tuns after")
</script>

আরও তথ্যের জন্য আপনি javascript.info দেখতে পারেন ।



1

লোড থাকলে GlobalEventHandlers mixin সম্পত্তির একটি লোড ইভেন্টের জন্য একটি ইভেন্ট হ্যান্ডলার হয় উইন্ডো, XMLHttpRequest- এর উপাদান ইত্যাদি যা দাবানল যখন রিসোর্স লোড হওয়ার।

সুতরাং মূলত জাভাস্ক্রিপ্টটিতে ইতিমধ্যে উইন্ডোতে অনলোড পদ্ধতি রয়েছে যা কার্যকর হয় কোন পৃষ্ঠাতে চিত্রগুলি সহ পুরোপুরি লোড হয় ...

আপনি কিছু করতে পারেন:

var spinner = true;

window.onload = function() {
  //whatever you like to do now, for example hide the spinner in this case
  spinner = false;
};

-1

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

$(document).ajaxComplete(function(){
       alert("Everything is ready now!");
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.