উত্তর:
window.onload = myOnloadFuncএবং একই ইভেন্টটি<body onload="myOnloadFunc();"> ব্যবহারের বিভিন্ন উপায় । ব্যবহারwindow.onload কম জেদী যদিও - এটা এইচটিএমএল আউট আপনার জাভাস্ক্রিপ্ট লাগে।
সমস্ত সাধারণ জাভাস্ক্রিপ্ট লাইব্রেরি, প্রোটোটাইপ, এক্সট্রিজ, দোজো, জ্যাকিউয়ারি, ওয়াইউআই ইত্যাদি ডকুমেন্টটি লোড হওয়ার সাথে সাথে ঘটে যাওয়া ইভেন্টগুলির চারপাশে দুর্দান্ত মোড়ক সরবরাহ করে। আপনি লোড ইভেন্টটিতে উইন্ডোটির জন্য শুনতে পারেন এবং এতে প্রতিক্রিয়া জানাতে পারেন, তবে সমস্ত সংস্থান ডাউনলোড না হওয়া পর্যন্ত অনলড বরখাস্ত করা হয় না, যাতে শেষ ইভেন্টটি না পাওয়া পর্যন্ত আপনার ইভেন্ট হ্যান্ডলারটি কার্যকর করা হবে না। কিছু ক্ষেত্রে আপনি যা চান ঠিক তেমনটি অন্যদের ক্ষেত্রে আপনি দেখতে পাবেন যে DOM প্রস্তুত হওয়ার জন্য শ্রবণ করা আরও উপযুক্ত this এই ইভেন্টটি অন-লডের মতো তবে ডাউনলোডের জন্য ইমেজ ইত্যাদির জন্য অপেক্ষা না করে আগুন জ্বলছে।
myOnloadFunc()বিশ্বব্যাপী প্রসঙ্গে কল করতে চলেছে ( thisউল্লেখ করবে window)। এটি জাভাস্ক্রিপ্টের মাধ্যমে সেট করা এটি উপাদানটির প্রসঙ্গে নির্বাহ করতে সক্ষম করবে ( thisইভেন্টটি যে উপাদানটির দিকে পরিচালিত হয়েছিল তাকে বোঝায়)। এই বিশেষ ক্ষেত্রে, এটি কোনও পার্থক্য করবে না, তবে এটি অন্যান্য উপাদানগুলির সাথেও হবে।
thisপছন্দসই বিষয়টিকে ওভাররাইড করতে পারে desired
কোনও পার্থক্য নেই, তবে আপনারও ব্যবহার করা উচিত নয়।
অনেকগুলি ব্রাউজারে, window.onloadসমস্ত চিত্র লোড না হওয়া অবধি ইভেন্টটি ট্রিগার করা হয় না, যা আপনি চান তা নয়। স্ট্যান্ডার্ড ভিত্তিক ব্রাউজারগুলির একটি ইভেন্ট রয়েছে DOMContentLoadedযা আগে আগুন জ্বলতে থাকে তবে এটি IE সমর্থন করে না (এই উত্তরটি লেখার সময়)। আমি একটি জাভাস্ক্রিপ্ট লাইব্রেরি ব্যবহার করার পরামর্শ দেব যা ক্রস ব্রাউজার DOMContentLoaded বৈশিষ্ট্য সমর্থন করে, বা আপনি ব্যবহার করতে পারেন এমন একটি ভাল লিখিত ফাংশন সন্ধান করতে চাই। jQuery এর $(document).ready()একটি ভাল উদাহরণ।
window.onloadশরীর ছাড়া কাজ করতে পারেন। কেবল স্ক্রিপ্ট ট্যাগ সহ পৃষ্ঠাটি তৈরি করুন এবং এটি একটি ব্রাউজারে খুলুন। পৃষ্ঠাতে কোনও শরীর থাকে না তবে এটি এখনও কার্যকর হয় ..
<script>
function testSp()
{
alert("hit");
}
window.onload=testSp;
</script>
<!ELEMENT html (head, body)>[1] - এবং html401 নির্দিষ্ট করে <!ELEMENT HTML O O (%html.content;)দিয়ে <!ENTITY % html.content "HEAD, BODY">পাশাপাশি [2]। A head element followed by a body element.এইচটিএমএল 51 এইচটিএমএল বিষয়বস্তুর জন্যও জানিয়েছে । [3] w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0- কঠোর w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0- কঠোর w3.org/TR/html51/semantics.html# -html-উপাদানের - তো আমি ঐ সাধারণ / ইন-ব্যবহার এইচটিএমএল মান সব অনুমান না একটি শরীরের ট্যাগ প্রয়োজন। :)
Start tag: optional, End tag: optional
আমি সাধারণত > ইভেন্টটি ব্যবহার না করা পছন্দ করি <body onload=""। আমি মনে করি আচরণটি যতটা সম্ভব সামগ্রী থেকে আলাদা রাখা আরও পরিষ্কার।
এটি বলেছিল, এমন কিছু অনুষ্ঠান রয়েছে (সাধারণত আমার জন্য খুব বিরল) যেখানে বডি অনলোড ব্যবহার করা সামান্য গতি বাড়িয়ে দিতে পারে।
আমি প্রোটোটাইপটি ব্যবহার করতে পছন্দ করি তাই আমি সাধারণত <headআমার পৃষ্ঠার>> তে এই জাতীয় কিছু রাখি:
document.observe("dom:loaded", function(){
alert('The DOM is loaded!');
});
অথবা
Event.observe(window, 'load', function(){
alert('Window onload');
});
উপরের কৌশলগুলি আমি এখানে শিখেছি । আমি এইচটিএমএলের বাইরে সংযুক্ত ইভেন্ট হ্যান্ডলারগুলির ধারণাটি খুব পছন্দ করি।
(কোডে বানান ভুল সংশোধন করতে সম্পাদনা করুন।)
'উদ্দেশ্যমূলক প্রশ্নের এতগুলি বিষয়ভিত্তিক উত্তর "বিরক্তিহীন" জাভাস্ক্রিপ্ট কখনও গোটোস ব্যবহার না করার পুরানো নিয়মের মতো কুসংস্কার। কোডটি এমনভাবে লিখুন যা আপনাকে নির্ভরযোগ্যভাবে আপনার লক্ষ্য অর্জনে সহায়তা করে, কারও ট্রেন্ডি ধর্মীয় বিশ্বাস অনুসারে নয়।
যে কেউ খুঁজে পায়:
<body onload="body_onload();">
অতিরিক্ত বিভ্রান্তিকর হওয়া অত্যধিক কৌতুকপূর্ণ এবং তাদের অগ্রাধিকার সোজা হয় না।
আমি সাধারণত আমার জাভাস্ক্রিপ্ট কোডটি একটি পৃথক .js ফাইলে রেখেছি, তবে এইচটিএমএল-তে ইভেন্ট হ্যান্ডলারগুলিকে আঁকানো সম্পর্কে আমার কোনও অসুবিধে নেই, যা বৈধ এইচটিএমএল।
window.onload- সমস্ত ডিওএম, জেএস ফাইল, চিত্র, আইফ্রেমেস, এক্সটেনশান এবং অন্যদের সম্পূর্ণ লোড হওয়ার পরে ডাকা। এটি $ (উইন্ডো) এর সমান load লোড (ফাংশন () {});
body onload=""- একবার ডওএম লোড করা হয়। এটি $ (ডকুমেন্ট) এর সমান। প্রস্তুত (ফাংশন () {});
readyবনাম onloadইভেন্টগুলি সম্পর্কে সবচেয়ে বড় ভুল ধারণা হিসাবে চিহ্নিত করা হয় । loadসমস্ত স্ক্রিপ্ট, চিত্র এবং স্টাইলশিট সহ পুরো দস্তাবেজ লোড হওয়ার পরে অগ্নিকাণ্ডগুলি। DOMContentLoadedডিওএম গাছ তৈরির পরে আগত তবে ইমেজ ইত্যাদির আগে। এর DOMContentLoadedসমানতা রয়েছে document.ready, নয় load।
আপনি যদি আপত্তিজনক জেএস কোড লেখার চেষ্টা করছেন (এবং আপনার হওয়া উচিত) তবে আপনার ব্যবহার করা উচিত নয় <body onload="">।
এটি আমার বোঝা যায় যে বিভিন্ন ব্রাউজারগুলি এই দুটি সামান্য আলাদাভাবে পরিচালনা করে তবে তারা একইভাবে কাজ করে। বেশিরভাগ ব্রাউজারগুলিতে, আপনি উভয়ই সংজ্ঞায়িত করলে একটি এড়ানো হবে।
অন্য কোনও অ্যাট্রিবিউটের মতো অনলোড সম্পর্কে চিন্তা করুন। একটি ইনপুট বাক্সে, উদাহরণস্বরূপ, আপনি এটি রাখতে পারেন:
<input id="test1" value="something"/>
অথবা আপনি কল করতে পারেন:
document.getElementById('test1').value = "somethingelse";
ওল্ড অ্যাট্রিবিউট একইভাবে কাজ করে, ব্যতীত এটি মানটির মতো স্ট্রিংয়ের পরিবর্তে এটির মান হিসাবে একটি ফাংশন নেয়। এটি আপনাকে ব্যাখ্যা করে কেন আপনি "কেবলমাত্র সেগুলির মধ্যে একটি ব্যবহার করতে পারেন" - কল করার উইন্ডো.অনলোড বডি ট্যাগের জন্য ওভারলোড বৈশিষ্ট্যের মানটিকে পুনরায় স্বাক্ষর করে।
এছাড়াও, অন্যদের মতো এখানেও বলা হচ্ছে, সাধারণত শৈলী এবং জাভাস্ক্রিপ্ট পৃষ্ঠার বিষয়বস্তু থেকে আলাদা রাখা পরিষ্কার, তাই বেশিরভাগ লোক উইন্ডো.অনলোড ব্যবহার করতে বা jQuery এর প্রস্তুত ফাংশনটি পছন্দ করার পরামর্শ দেয়।
<বডি অনলোড = ""> উইন্ডো.অনলোডকে ওভাররাইড করা উচিত।
<বডি অনলোড = ""> এর সাথে ডকুমেন্ট.বডি.অনলড শূন্য, অপরিজ্ঞাত বা ব্রাউজারের উপর নির্ভর করে একটি ফাংশন হতে পারে (যদিও getAttribute ("অনলোড") স্ট্রিং হিসাবে বেনাম ফাংশনটির দেহ পাওয়ার জন্য কিছুটা সামঞ্জস্যপূর্ণ হওয়া উচিত) । উইন্ডো.অনলোড সহ, আপনি যখন এটিতে কোনও ফাংশন বরাদ্দ করবেন, উইন্ডো.নলোডটি ব্রাউজারগুলিতে নিয়মিতভাবে একটি ফাংশন হবে। যদি এটি আপনার পক্ষে গুরুত্বপূর্ণ হয় তবে উইন্ডো.অনলোড ব্যবহার করুন।
উইন্ডো.নলোড যেভাবে আপনার সামগ্রী থেকে জেএসকে আলাদা করার জন্য ভাল। যখন আপনি উইন্ডো.অনলোড ব্যবহার করতে পারেন তবে <বডি অনলোড = ""> ব্যবহার করার খুব বেশি কারণ নেই।
অপেরাতে উইন্ডো.অনলোড এবং <বডি অনলোড = ""> (এবং এমনকি উইন্ডোএডএডএভেন্টলিস্টনার ("লোড", ফান, মিথ্যা)) এর ইভেন্ট টার্গেটটি সাফারি এবং ফায়ারফক্সের মতো নথির পরিবর্তে উইন্ডো হবে be তবে, 'এটি' ব্রাউজারগুলির জুড়ে উইন্ডো হবে।
এর অর্থ হ'ল এটি যখন গুরুত্বপূর্ণ তখন আপনার ক্রুডটি মোড়ানো উচিত এবং জিনিসগুলিকে সামঞ্জস্য করা উচিত বা আপনার জন্য এটি একটি লাইব্রেরি ব্যবহার করা উচিত।
তারা উভয় একই কাজ। তবে নোট করুন যে উভয়কেই সংজ্ঞায়িত করা হলে তাদের মধ্যে কেবল একটিরই অনুরোধ করা হবে। আমি সাধারণত তাদের উভয় সরাসরি ব্যবহার এড়ানো। পরিবর্তে, আপনি লোড ইভেন্টে একটি ইভেন্ট হ্যান্ডলার সংযুক্ত করতে পারেন। এইভাবে আপনি আরও সহজেই অন্যান্য জেএস প্যাকেজগুলিকে অন্তর্ভুক্ত করতে পারেন যা অনলোড ইভেন্টে একটি কলব্যাক সংযুক্ত করার প্রয়োজন হতে পারে।
যে কোনও জেএস ফ্রেমওয়ার্কে ইভেন্ট হ্যান্ডলারের জন্য ক্রস ব্রাউজার পদ্ধতি থাকবে।
বিষয়বস্তু, বিন্যাস এবং আচরণ পৃথক করে রাখা এটি একটি স্বীকৃত মান। সুতরাং উইন্ডো.নলোড () ব্যবহারের পক্ষে উপযুক্ত হবে <body onload="">যদিও উভয়ই একই কাজ করে।
দুঃখিত ঘুমের অন্য 3 বছর পর এই থ্রেড আবার পুনর্জন্ম জন্য, কিন্তু সম্ভবত পরিশেষে আমি এর অনস্বীকার্য সুবিধা পাওয়া যায় window.onload=fn1;বেশি <body onload="fn1()">। এটি জেএস মডিউল বা ইএস মডিউলগুলি নিয়ে উদ্বেগ প্রকাশ করে : যখন আপনার onloadহ্যান্ডলারটি "ধ্রুপদী" জেএস ফাইলে থাকে (যেমন ছাড়াই উল্লিখিত <script type="module" … >হয়, উভয় উপায়েই সম্ভব; যখন আপনার onloadহ্যান্ডলারটি "মডিউল" জেএস ফাইলটিতে থাকে) (যেমন উল্লেখ করা হয়েছে <script type="module" … >, <body onload="fn1()">"fn1" দিয়ে ব্যর্থ হবে) () সংজ্ঞায়িত করা হয়নি "ত্রুটি। কারণ সম্ভবত এটি হ'ল এইচটিএমএল বিশ্লেষণ করার আগে ইএস মডিউলগুলি লোড করা হয়নি ... তবে এটি আমার অনুমান মাত্র যাইহোক, window.onload=fn1;মডিউলগুলির সাথে নিখুঁতভাবে কাজ করে ...