জাভাস্ক্রিপ্ট window.onloadএবং jQuery এর $(document).ready()পদ্ধতির মধ্যে পার্থক্য কী ?
$().ready()করে তা এটি window.onloadসময়ে সময়ে আগুনে পরিণত করে।
জাভাস্ক্রিপ্ট window.onloadএবং jQuery এর $(document).ready()পদ্ধতির মধ্যে পার্থক্য কী ?
$().ready()করে তা এটি window.onloadসময়ে সময়ে আগুনে পরিণত করে।
উত্তর:
readyসময় পরে HTML ডকুমেন্ট লোড হয়েছে ঘটনা ঘটে, onloadঘটনা, পরে দেখা দেয় যখন সমস্ত সামগ্রী (যেমন চিত্র) এছাড়াও লোড হয়েছে।
onloadযখন ইভেন্ট, DOM মধ্যে একটি প্রমিত ঘটনা readyঘটনা jQuery থেকে নির্দিষ্ট। readyইভেন্টটির উদ্দেশ্য হ'ল ডকুমেন্টটি লোড হওয়ার পরে যত তাড়াতাড়ি সম্ভব এটি হওয়া উচিত, যাতে পৃষ্ঠার উপাদানগুলিতে কার্যকারিতা যুক্ত করার কোডটি সমস্ত সামগ্রী লোড হওয়ার জন্য অপেক্ষা করতে হবে না।
readyঘটনা হল jQuery এর নির্দিষ্ট। এটি DOMContentLoadedইভেন্টটি ব্রাউজারে উপলভ্য থাকলে তা ব্যবহার করছে , অন্যথায় এটি তা অনুকরণ করে। ডিওমে কোনও সঠিক সমতুল্য নেই কারণ DOMContentLoadedইভেন্টটি সমস্ত ব্রাউজারে সমর্থিত নয়।
onload। ইভেন্টটির ট্রিগার onloadহওয়ার সাথে সাথে একটি ক্রিয়াকলাপটি সঞ্চয় করার জন্য এমন কোনও অবজেক্ট প্রোপার্টিটির নাম load।
window.onloadঅন্তর্নিহিত জাভাস্ক্রিপ্ট ইভেন্ট, তবে এর বাস্তবায়নের ফলে ব্রাউজারগুলিতে সূক্ষ্ম কীর্তি ছিল (ফায়ারফক্স, ইন্টারনেট এক্সপ্লোরার 6, ইন্টারনেট এক্সপ্লোরার 8, এবং অপেরা ), jQuery সরবরাহ করে document.ready, যা সেগুলি দূরে রেখে দেয় এবং পৃষ্ঠার ডিওএম প্রস্তুত হওয়ার সাথে সাথে আগুন জ্বলে ওঠে s (চিত্র ইত্যাদির জন্য অপেক্ষা করে না)।
$(document).ready(নোট করুন যে এটি নয় document.ready , যা পূর্বনির্ধারিত নয়) একটি jQuery ফাংশন, নিম্নলিখিত ইভেন্টগুলিতে মোড়ানো এবং ধারাবাহিকতা সরবরাহ করে:
document.ondomcontentready/ document.ondomcontentloaded- একটি নব্য ঘটনা যা ডকুমেন্টের ডিওএম লোড হয়ে যাওয়ার পরে আগুনে ছড়িয়ে পড়ে (যা চিত্রগুলি লোড হওয়ার কিছুটা সময় আগে হতে পারে ); আবার, ইন্টারনেট এক্সপ্লোরার এবং বিশ্বের অন্যান্য অংশে কিছুটা আলাদাwindow.onload(যা পুরানো ব্রাউজারগুলিতে এমনকি প্রয়োগ করা হয়), যখন পুরো পৃষ্ঠাটি লোড হয় (চিত্র, শৈলী ইত্যাদি) জ্বলে ওঠেloadইভেন্টটি windowযথাযথভাবে ধারাবাহিকভাবে প্রয়োগ করা হয়। JQuery এবং অন্যান্য লাইব্রেরিগুলি যে সমস্যার সমাধান করতে চাইছে তা হ'ল আপনি উল্লেখ করেছেন, এটি হ'ল loadইভেন্টটি চালানো হয় না যতক্ষণ না সমস্ত নির্ভরশীল সংস্থান যেমন চিত্র এবং স্টাইলশিট লোড না হয়ে থাকে যা ডিওএম সম্পূর্ণরূপে লোড হওয়ার পরে দীর্ঘ সময় হতে পারে, রেন্ডার এবং ইন্টারঅ্যাকশন জন্য প্রস্তুত। DOM প্রস্তুত হওয়ার সময় বেশিরভাগ ব্রাউজারগুলিতে যে ইভেন্টটি ছড়িয়ে পড়ে তাকে ডাকা হয় DOMContentLoaded, না DOMContentReady।
onloadএটির সাথেও রয়েছে (এফএফ / আইই / অপেরা পার্থক্য রয়েছে)। হিসাবে DOMContentLoaded, আপনি সম্পূর্ণরূপে সঠিক। স্পষ্ট করার জন্য সম্পাদনা।
document.onloadব্যবহারযোগ্য ছিল)। window.onload = fn1;window.onload=fn2;উইন্ডো.অনলোড যতদূর যায়: - কেবল fn2 চালিত অনলোডটি পেত। কিছু নিখরচায় ওয়েবহোস্টগুলি ডকুমেন্টগুলিতে তাদের নিজস্ব কোড sertোকায় এবং কখনও কখনও এটি ইন-পৃষ্ঠা কোডটি ক্লাব করে।
$(document).ready()একটি jQuery ইভেন্ট। ডিওএম প্রস্তুত হওয়ার $(document).ready()সাথে সাথেই জিকুয়ের পদ্ধতিটি কল হয়ে যায় (যার অর্থ ব্রাউজারটি এইচটিএমএলকে বিশ্লেষণ করে ডোম গাছ তৈরি করেছে)। ডকুমেন্টটি ম্যানিপুলেট করার জন্য প্রস্তুত হওয়ার সাথে সাথে এটি আপনাকে কোড চালানোর অনুমতি দেয়।
উদাহরণস্বরূপ, যদি কোনও ব্রাউজার ডোমকন্টেন্টলয়েড ইভেন্টটিকে সমর্থন করে (অনেকগুলি নন-আইই ব্রাউজারগুলি করে) তবে এটি সেই ইভেন্টে ছড়িয়ে যাবে। (দ্রষ্টব্য যে DOMContentLoaded ইভেন্টটি কেবল আই 9 + এ আইইতে যুক্ত করা হয়েছিল))
এর জন্য দুটি বাক্য গঠন ব্যবহার করা যেতে পারে:
$( document ).ready(function() {
console.log( "ready!" );
});
বা শর্টহ্যান্ড সংস্করণ:
$(function() {
console.log( "ready!" );
});
প্রধান পয়েন্ট $(document).ready():
$সাথে প্রতিস্থাপন করুন jQuery।$(window).load()পরিবর্তে ব্যবহার করুন। window.onload()একটি নেটিভ জাভাস্ক্রিপ্ট ফাংশন। window.onload()আপনার পৃষ্ঠার সমস্ত সামগ্রী DOM (ডকুমেন্ট অবজেক্ট মডেল), ব্যানার বিজ্ঞাপন এবং চিত্র সহ লোড হয়ে যাওয়ার পরে ইভেন্টটি জ্বলে উঠবে। উভয়ের মধ্যে আরেকটি পার্থক্য হ'ল আমাদের একাধিক $(document).ready()ফাংশন থাকতে পারে, তবে আমরা কেবল একটির onloadকাজ করতে পারি ।
আপনার পৃষ্ঠার সমস্ত সামগ্রী DOM (ডকুমেন্ট অবজেক্ট মডেল) সামগ্রী এবং অ্যাসিঙ্ক্রোনাস জাভাস্ক্রিপ্ট , ফ্রেম এবং চিত্র সহ সম্পূর্ণ লোড হয়ে গেলে একটি উইন্ডোজ লোড ইভেন্টে আগুন জ্বলে ওঠে । আপনি বডি অনলোড =ও ব্যবহার করতে পারেন। উভয়ই এক; এবং একই ইভেন্টটি ব্যবহারের বিভিন্ন উপায়।window.onload = function(){}<body onload="func();">
jQuery$document.ready ফাংশন ইভেন্টটি তার আগে একটু আগে সম্পাদন করে window.onloadএবং ডুম (ডকুমেন্ট অবজেক্ট মডেল) আপনার পৃষ্ঠায় লোড হওয়ার পরে একবার ডেকে আনে। এটি চিত্র, ফ্রেম পুরোপুরি লোড হওয়ার জন্য অপেক্ষা করবে না ।
নিম্নলিখিত নিবন্ধ থেকে নেওয়া:
কিভাবে $document.ready()পৃথকwindow.onload()
$(document).ready(function() {
// Executes when the HTML document is loaded and the DOM is ready
alert("Document is ready");
});
// .load() method deprecated from jQuery 1.8 onward
$(window).on("load", function() {
// Executes when complete page is fully loaded, including
// all frames, objects and images
alert("Window is loaded");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
$(document).ready()ইন্টারনেট এক্সপ্লোরার ব্যবহার করে সতর্কতার একটি শব্দ । পুরো ডকুমেন্টটি লোড হওয়ার আগে যদি কোনও এইচটিটিপি অনুরোধ বাধাগ্রস্থ হয় (উদাহরণস্বরূপ, যখন কোনও পৃষ্ঠা ব্রাউজারে প্রবাহিত হয়, অন্য লিঙ্কটি ক্লিক করা হয়) আইই $(document).readyইভেন্টটি ট্রিগার করবে ।
$(document).ready()ইভেন্টের মধ্যে কোনও কোড যদি ডিওএম অবজেক্টের উল্লেখ করে তবে সেই বস্তুগুলির সন্ধানের সম্ভাবনা নেই এবং জাভাস্ক্রিপ্ট ত্রুটি ঘটতে পারে। হয় objects অবজেক্টগুলির জন্য আপনার রেফারেন্সগুলি রক্ষা করুন, বা কোডটি ডিফেন্ড করুন যা সেই বিষয়গুলিকে উইন্ডো.লোট ইভেন্টে রেফার করে।
আমি অন্যান্য ব্রাউজারগুলিতে এই সমস্যাটি পুনরুত্পাদন করতে সক্ষম হইনি (বিশেষত ক্রোম এবং ফায়ারফক্স)
window.addEventListenerউইন্ডোতে কোনও ইভেন্ট যুক্ত করতে সর্বদা ব্যবহার করুন। কারণ এইভাবে আপনি কোডটি বিভিন্ন ইভেন্ট হ্যান্ডলারে চালিত করতে পারেন।
সঠিক কোড:
window.addEventListener('load', function () {
alert('Hello!')
})
window.addEventListener('load', function () {
alert('Bye!')
})
ভুল সঙ্কেত:
window.onload = function () {
alert('Hello!') // it will not work!!!
}
window.onload = function () {
alert('Bye!')
}
এটি হ'ল কারণ লোড হ'ল বস্তুর সম্পত্তি, যা ওভাররাইট করা আছে।
সাথে সাদৃশ্য করে addEventListener, এটি $(document).ready()লোডের চেয়ে ব্যবহার করা ভাল ।
$(document).on('ready', handler)jQuery থেকে প্রস্তুত ইভেন্টের সাথে আবদ্ধ। ডিওএম লোড হওয়ার পরে হ্যান্ডলারটি ডাকা হয় । চিত্রগুলির মতো সম্পদ সম্ভবত এখনও অনুপস্থিত । বাঁধাইয়ের সময় নথিটি প্রস্তুত থাকলে এটি কখনই ডাকা হবে না। jQuery এর ব্যবহার DOMContentLoaded , যে জন্য -Event এটা এমুলেট যদি উপলব্ধ নয়।
$(document).on('load', handler)সার্ভার থেকে সমস্ত সংস্থান লোড হয়ে যাওয়ার পরে তা বরখাস্ত করা হবে এমন একটি ইভেন্ট । চিত্রগুলি এখন লোড হয়েছে। অনলোড যখন একটি কাঁচা এইচটিএমএল ইভেন্ট হয়, প্রস্তুত jQuery দ্বারা নির্মিত হয়।
$(document).ready(handler)আসলে একটি প্রতিশ্রুতি । কল করার সময় নথি প্রস্তুত থাকলে অবিলম্বে হ্যান্ডলারটি কল করা হবে। অন্যথায় এটি- readyইভেন্টের সাথে আবদ্ধ হয় ।
JQuery 1.8 এর আগে , $(document).load(handler)একটি উপন্যাস হিসাবে উপস্থিত ছিল $(document).on('load',handler)।
$.fn.loadপড়েছেন এখন আর ইভেন্ট বাইন্ডার হিসাবে আচরণ করবেন না। আসলে, এটি jquery 1.8 থেকে অপ্রচলিত। আমি সে অনুযায়ী এটি আপডেট করেছি
এটি $(document).ready()হ'ল একটি jQuery ইভেন্ট যা এইচটিএমএল ডকুমেন্টটি পুরোপুরি লোড হয়ে যাওয়ার window.onloadপরে ঘটে থাকে, যখন ঘটনাটি পরে ঘটে থাকে, যখন পৃষ্ঠার চিত্রগুলি সহ সমস্ত কিছু লোড হয়।
উইন্ডো.অনলোডটি ডিওমে একটি খাঁটি জাভাস্ক্রিপ্ট ইভেন্ট, যখন $(document).ready()ইভেন্টটি jQuery এর একটি পদ্ধতি।
$(document).ready() উপাদানগুলি যে সমস্ত লোড হওয়া উপাদানগুলি jQuery এ ব্যবহার করা হবে তা নিশ্চিত করার জন্য সাধারণত jQuery এর মোড়ক ...
এটি কীভাবে কাজ করছে তা বুঝতে jQuery উত্স কোডটি দেখুন:
jQuery.ready.promise = function( obj ) {
if ( !readyList ) {
readyList = jQuery.Deferred();
// Catch cases where $(document).ready() is called after the browser event has already occurred.
// we once tried to use readyState "interactive" here, but it caused issues like the one
// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
if ( document.readyState === "complete" ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
setTimeout( jQuery.ready );
// Standards-based browsers support DOMContentLoaded
} else if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", completed, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", completed, false );
// If IE event model is used
} else {
// Ensure firing before onload, maybe late but safe also for iframes
document.attachEvent( "onreadystatechange", completed );
// A fallback to window.onload, that will always work
window.attachEvent( "onload", completed );
// If IE and not a frame
// continually check to see if the document is ready
var top = false;
try {
top = window.frameElement == null && document.documentElement;
} catch(e) {}
if ( top && top.doScroll ) {
(function doScrollCheck() {
if ( !jQuery.isReady ) {
try {
// Use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
top.doScroll("left");
} catch(e) {
return setTimeout( doScrollCheck, 50 );
}
// detach all dom ready events
detach();
// and execute any waiting functions
jQuery.ready();
}
})();
}
}
}
return readyList.promise( obj );
};
jQuery.fn.ready = function( fn ) {
// Add the callback
jQuery.ready.promise().done( fn );
return this;
};
এছাড়াও আমি নীচের চিত্রটি উভয়ের জন্য দ্রুত রেফারেন্স হিসাবে তৈরি করেছি:
উইন্ডো.নলোড: একটি সাধারণ জাভাস্ক্রিপ্ট ইভেন্ট।
ডকুমেন্ট.ডিয়ার: পুরো এইচটিএমএলটি লোড হয়ে যাওয়ার পরে একটি নির্দিষ্ট jQuery ইভেন্ট।
একটি জিনিস মনে রাখতে হবে (বা আমি প্রত্যাহার করে বলি) হ'ল আপনি নিজের onloadমতো করে স্ট্যাক করতে পারবেন না ready। অন্য কথায়, jQuery যাদু readyএকই পৃষ্ঠায় একাধিক গুলিকে অনুমতি দেয় তবে আপনি এটি দিয়ে এটি করতে পারবেন না onload।
শেষটি onloadপূর্বের যেকোনো একটিকে ছাড়িয়ে দেবে onload।
এর সাথে মোকাবিলা করার একটি দুর্দান্ত উপায় হ'ল একটি ফাংশন যা স্পষ্টতই একজন সাইমন উইলিসন লিখেছেন এবং একাধিক জাভাস্ক্রিপ্ট অনোলড ফাংশন ব্যবহার করে বর্ণনা করেছেন ।
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
// Example use:
addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
addLoadEvent(function() {
/* More code to run on page load */
});
Document.ready(একটি jQuery ইভেন্ট) আগুন দেবে যখন সমস্ত উপাদানগুলি স্থানে থাকবে এবং সেগুলি জাভাস্ক্রিপ্ট কোডে উল্লেখ করা যেতে পারে, তবে সামগ্রীটি প্রয়োজনীয়ভাবে লোড হয় না। Document.readyএইচটিএমএল ডকুমেন্টটি লোড হওয়ার পরে কার্যকর করে।
$(document).ready(function() {
// Code to be executed
alert("Document is ready");
});
window.loadজন্য পৃষ্ঠা সম্পূর্ণরূপে লোড করা তবে অপেক্ষা করতে হবে। এর মধ্যে রয়েছে অভ্যন্তরীণ ফ্রেম, চিত্র ইত্যাদি includes
$(window).load(function() {
//Fires when the page is loaded completely
alert("window is loaded");
});
ডকুমেন্ট.টিডিআর ইভেন্টটি HTML ডকুমেন্টটি লোড হওয়ার window.onloadপরে ঘটে এবং ইভেন্টটি সর্বদা পরে ঘটে যখন সমস্ত সামগ্রী (চিত্রগুলি ইত্যাদি) লোড করা হয়।
document.readyচিত্রগুলি লোড হওয়ার অপেক্ষায় না রেখে আপনি যদি রেন্ডারিং প্রক্রিয়াতে "প্রারম্ভিক" হস্তক্ষেপ করতে চান তবে আপনি ইভেন্টটি ব্যবহার করতে পারেন । আপনার স্ক্রিপ্ট "কিছু" করার আগে আপনার যদি চিত্র (বা অন্য কোনও "বিষয়বস্তু") প্রস্তুত করা প্রয়োজন হয়, আপনার অপেক্ষা করা উচিত window.onload।
উদাহরণস্বরূপ, যদি আপনি একটি "স্লাইড শো" প্যাটার্নটি প্রয়োগ করে থাকেন এবং আপনাকে চিত্রের আকারের উপর ভিত্তি করে গণনা করা দরকার হয় তবে আপনি অপেক্ষা করতে পারেন window.onload। অন্যথায়, চিত্রগুলি কীভাবে দ্রুত লোড হবে তার উপর নির্ভর করে আপনি কিছু এলোমেলো সমস্যাও পেতে পারেন। আপনার স্ক্রিপ্ট একই সাথে চলমান থ্রেডের সাথে ইমেজগুলি লোড করবে। যদি আপনার স্ক্রিপ্টটি যথেষ্ট দীর্ঘ হয়, বা সার্ভারটি যথেষ্ট দ্রুত গতিতে থাকে, তবে চিত্রগুলি সময়মতো আগত হলে আপনি কোনও সমস্যা লক্ষ্য করতে পারেন না। তবে সবচেয়ে নিরাপদ অনুশীলনটি চিত্রগুলি লোড হওয়ার অনুমতি দেয়।
document.readyআপনার কাছে কিছু "লোডিং ..." চিহ্ন ব্যবহারকারীদের কাছে দেখানোর জন্য একটি দুর্দান্ত ঘটনা হতে পারে window.onloadএবং এরপরে, আপনি যে কোনও স্ক্রিপ্টিং প্রয়োজন যা সংস্থানগুলি লোড করা দরকার, এবং শেষ পর্যন্ত "লোডিং ..." চিহ্নটি সরিয়ে ফেলতে পারেন।
উদাহরণ: -
// document ready events
$(document).ready(function(){
alert("document is ready..");
})
// using JQuery
$(function(){
alert("document is ready..");
})
// window on load event
function myFunction(){
alert("window is loaded..");
}
window.onload = myFunction;
window.onloadএকটি জাভাস্ক্রিপ্ট ইনবিল্ট ফাংশন। window.onloadএইচটিএমএল পৃষ্ঠা লোড হওয়ার পরে ট্রিগার করুন। window.onloadশুধুমাত্র একবার লেখা যেতে পারে।
document.readyjQuery লাইব্রেরির একটি ফাংশন। document.readyএইচটিএমএল এবং সমস্ত জাভাস্ক্রিপ্ট কোড, সিএসএস এবং এইচটিএমএল ফাইলের অন্তর্ভুক্ত চিত্রগুলি সম্পূর্ণ লোড হয়ে যাওয়ার পরে ট্রিগার হয়।
document.readyপ্রয়োজনীয়তা অনুসারে একাধিকবার লেখা যেতে পারে।
আপনি যখন বলেন $(document).ready(f), আপনি স্ক্রিপ্ট ইঞ্জিনকে নিম্নলিখিতটি করতে বলুন:
$এবং এটি নির্বাচন করুন, যেহেতু এটি স্থানীয় ক্ষেত্রের মধ্যে নেই, সুতরাং এটি অবশ্যই একটি হ্যাশ টেবিল সন্ধান করবে, যার সংঘর্ষ বা নাও থাকতে পারে।readyনির্বাচিত অবজেক্টের কল , পদ্ধতিটি খুঁজে পেতে এবং এটি প্রার্থনা করার জন্য নির্বাচিত অবজেক্টটিতে আরও একটি হ্যাশ টেবিল অনুসন্ধান অন্তর্ভুক্ত।সর্বোত্তম ক্ষেত্রে, এটি 2 হ্যাশ টেবিল লুকআপ, তবে এটি jQuery দ্বারা করা ভারী কাজকে উপেক্ষা করছে, যেখানে jQuery $এর সমস্ত সম্ভাব্য ইনপুটগুলির রান্নাঘর সিঙ্ক রয়েছে, সুতরাং হ্যান্ডলারের সংশোধন করার জন্য কোয়েরিটি প্রেরণের জন্য অন্য কোনও মানচিত্র সম্ভবত রয়েছে।
বিকল্পভাবে, আপনি এটি করতে পারেন:
window.onload = function() {...}
যা হবে
onloadহ্যাশ টেবিল লকআপ করে কোনও সম্পত্তি কিনা তা যাচাই করুন , যেহেতু এটি ফাংশনের মতো বলা হয়।সর্বোত্তম ক্ষেত্রে, এটিতে একটি একক হ্যাশ টেবিল লুকানোর জন্য ব্যয় হয়, যা প্রয়োজনীয় কারণ এটি আনতে onloadহবে।
আদর্শভাবে, jQuery তাদের ক্যারিগুলিকে স্ট্রিংগুলিতে সংকলন করবে যা আপনি jQuery যা করতে চান তা করতে পেস্ট করা যেতে পারে তবে jQuery এর রানটাইম প্রেরণ ছাড়াই। এইভাবে আপনার কোনও একটি বিকল্প আছে
eval।উইন্ডো.অনলোডটি ডিওএম এপিআই সরবরাহ করে এবং এটিতে "প্রদত্ত উত্স লোড হওয়ার পরে লোড ইভেন্টটি আগুন ধরিয়ে দেয়"।
"নথি লোড প্রক্রিয়া শেষে লোড ঘটনা দাবানল। এই মুহুর্তে, বস্তুর সব নথিতে DOM মধ্যে আছে, এবং সব ছবি, স্ক্রিপ্ট, লিঙ্ক এবং উপ-ফ্রেম সমাপ্ত লোড হবে।" ডোম অনলোড load
তবে jQuery $ (ডকুমেন্ট) এ। এটিতে ইমেজ, স্ক্রিপ্টস, আইফ্রেমেস ইত্যাদির অন্তর্ভুক্ত নেই jquery রেডি ইভেন্ট
সুতরাং jquery প্রস্তুত পদ্ধতি ডোম অনলোড ইভেন্টের চেয়ে আগে চলবে ।