जावास्क्रिप्ट window.onloadऔर jQuery की $(document).ready()विधि के बीच अंतर क्या हैं ?
$().ready()है वह window.onloadकई बार इसके बाद आग लगा देता है ।
जावास्क्रिप्ट window.onloadऔर jQuery की $(document).ready()विधि के बीच अंतर क्या हैं ?
$().ready()है वह window.onloadकई बार इसके बाद आग लगा देता है ।
जवाबों:
readyसमय के बाद HTML दस्तावेज़ लोड किया गया है घटना होती है, onloadघटना, बाद में तब होता है जब सभी सामग्री (जैसे चित्र) भी लोड किया गया है।
onloadजबकि घटना, डोम में एक मानक घटना है readyघटना jQuery के लिए विशिष्ट है। readyघटना का उद्देश्य यह है कि यह दस्तावेज़ लोड होने के बाद जितनी जल्दी हो सके हो, ताकि पृष्ठ में तत्वों को कार्यक्षमता जोड़ने वाले कोड को सभी सामग्री को लोड करने के लिए इंतजार न करना पड़े।
readyघटना है jQuery के लिए विशिष्ट। DOMContentLoadedयदि यह ब्राउज़र में उपलब्ध है तो यह घटना का उपयोग कर रहा है, अन्यथा यह इसका अनुकरण करता है। DOM में कोई सटीक समतुल्य नहीं है क्योंकि DOMContentLoadedईवेंट सभी ब्राउज़रों में समर्थित नहीं है।
onload। onloadएक ऑब्जेक्ट प्रॉपर्टी का नाम है जो loadइवेंट ट्रिगर होने पर एक फ़ंक्शन को स्टोर करता है।
window.onloadअंतर्निहित जावास्क्रिप्ट घटना है, लेकिन इसके कार्यान्वयन के दौरान ब्राउज़रों (फ़ायरफ़ॉक्स, इंटरनेट एक्सप्लोरर 6, इंटरनेट एक्सप्लोरर 8, और ओपेरा ) में सूक्ष्म quirks थे , jQuery प्रदान करता है , जो उन लोगों को दूर करता है, और जैसे ही पृष्ठ का DOM तैयार होता है। (छवियों के लिए इंतजार नहीं करता है, आदि)।document.ready
$(document).ready(ध्यान दें कि यह नहीं है document.ready , जो अपरिभाषित है) निम्नलिखित घटनाओं के लिए एक jQuery फ़ंक्शन, रैपिंग और स्थिरता प्रदान करता है:
document.ondomcontentready/ document.ondomcontentloaded- एक नई घटना जो दस्तावेज़ के डोम लोड होने पर आग लग जाती है (जो छवियों से पहले कुछ समय हो सकती है , आदि लोड होती हैं); फिर से, इंटरनेट एक्सप्लोरर और दुनिया के बाकी हिस्सों में थोड़ा अलगwindow.onload(जो पुराने ब्राउज़रों में भी लागू किया गया है), जो पूरे पृष्ठ लोड होने पर आग लग जाती है (चित्र, शैली, आदि)loadघटना को windowब्राउज़रों में लगातार लागू किया जाता है। समस्या जो jQuery और अन्य पुस्तकालयों को हल करने की कोशिश कर रही है वह है जिसका आपने उल्लेख किया है, यह है कि इस loadघटना को निकाल नहीं दिया जाता है जब तक कि सभी आश्रित संसाधन जैसे कि चित्र और स्टाइलशीट लोड नहीं हो जाते हैं, जो डोम के पूरी तरह से लोड होने के बाद लंबे समय तक हो सकता है, गाया और बातचीत के लिए तैयार। DOM तैयार होने पर अधिकांश ब्राउज़रों में आग लगने वाली घटना को बुलाया जाता है DOMContentLoaded, नहीं DOMContentReady।
onload(वहाँ मतभेद एफटी एफई / आईई / ओपेरा भी हैं)। के रूप में DOMContentLoaded, आप पूरी तरह से सही हैं। स्पष्ट करने का संपादन।
document.onloadथा)। जहाँ तक window.onload चला जाता है: window.onload = fn1;window.onload=fn2;- केवल fn2 को ही ऑनलोड लोड मिलेगा। कुछ नि: शुल्क वेबहोस्ट्स अपने स्वयं के कोड को दस्तावेजों में सम्मिलित करते हैं, और कभी-कभी यह इन-पेज कोड को बंद कर देते हैं।
$(document).ready()एक jQuery की घटना है। $(document).ready()जैसे ही DOM तैयार होता है (जिसका अर्थ है कि ब्राउज़र ने HTML को पार्स कर दिया है और DOM ट्री का निर्माण किया है) जैसे ही JQuery की विधि मिलती है। यह आपको दस्तावेज़ को हेरफेर करने के लिए तैयार होते ही कोड चलाने की अनुमति देता है।
उदाहरण के लिए, यदि कोई ब्राउज़र DOMContentLoaded घटना का समर्थन करता है (जैसा कि कई गैर-IE ब्राउज़र करते हैं), तो यह उस घटना पर आग लगा देगा। (ध्यान दें कि DOMContentLoaded घटना केवल IE9 + में IE में जोड़ी गई थी।)
इसके लिए दो सिंटैक्स का उपयोग किया जा सकता है:
$( document ).ready(function() {
console.log( "ready!" );
});
या आशुलिपि संस्करण:
$(function() {
console.log( "ready!" );
});
इसके लिए मुख्य बिंदु $(document).ready():
$के साथ jQueryजब आप प्राप्त "$ परिभाषित नहीं है।"$(window).load()इसके बजाय उपयोग करें । window.onload()एक देशी जावास्क्रिप्ट फ़ंक्शन है। window.onload()घटना पर सक्रिय होता है अपने पृष्ठ पर सभी सामग्री लोड हो जाए, डोम (दस्तावेज़ ऑब्जेक्ट मॉडल), बैनर विज्ञापन और छवियों सहित। दोनों के बीच एक और अंतर यह है कि, जबकि हमारे पास एक से अधिक $(document).ready()फ़ंक्शन हो सकते हैं, हम केवल एक onloadफ़ंक्शन कर सकते हैं ।
जब आपके पृष्ठ की सभी सामग्री DOM (दस्तावेज़ ऑब्जेक्ट मॉडल) सामग्री और अतुल्यकालिक जावास्क्रिप्ट , फ़्रेम और छवियों सहित पूरी तरह लोड हो जाती है, तो एक विंडोज लोड घटना आग हो जाती है । आप बॉडी ऑनलोड = का भी उपयोग कर सकते हैं। दोनों एक ही हैं; और एक ही घटना के उपयोग के विभिन्न तरीके हैं।window.onload = function(){}<body onload="func();">
jQuery$document.ready फ़ंक्शन ईवेंट window.onloadआपके पृष्ठ पर DOM (दस्तावेज़ ऑब्जेक्ट मॉडल) लोड होने के बाद पहले की तुलना में थोड़ा सा निष्पादित होता है । यह पूरी तरह से लोड होने के लिए छवियों, फ़्रेमों का इंतजार नहीं करेगा ।
निम्नलिखित लेख से लिया गया:
कैसे $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()इंटरनेट एक्सप्लोरर के साथ उपयोग करने पर सावधानी का एक शब्द । यदि संपूर्ण दस्तावेज़ लोड होने से पहले एक HTTP अनुरोध बाधित हो जाता है (उदाहरण के लिए, जबकि एक पृष्ठ ब्राउज़र को स्ट्रीमिंग कर रहा है, तो एक और लिंक पर क्लिक किया जाता है) IE ट्रिगर होगा$(document).ready घटना ।
यदि $(document).ready()ईवेंट के भीतर कोई कोड डोम ऑब्जेक्ट्स को संदर्भित करता है, तो संभावित उन ऑब्जेक्ट्स के लिए मौजूद नहीं है और जावास्क्रिप्ट त्रुटियां हो सकती हैं। या तो उन वस्तुओं के लिए अपने संदर्भों की रक्षा करें, या कोड को हटाएं जो उन वस्तुओं को खिड़की पर लोड करता है। घटना।
मैं अन्य ब्राउज़र (विशेष रूप से, क्रोम और फ़ायरफ़ॉक्स) में इस समस्या को पुन: पेश करने में सक्षम नहीं हूं
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()onload के बजाय उपयोग करने के लिए बेहतर है ।
$(document).on('ready', handler)jQuery से तैयार घटना के लिए बाध्य करता है। डोम लोड होने पर हैंडलर को कहा जाता है । चित्र जैसी संपत्तियाँ शायद अभी भी गायब हैं । यह कभी नहीं कहा जाएगा कि क्या दस्तावेज बाध्यकारी के समय तैयार है। jQuery उस के लिए DOMContentLoaded -Event का उपयोग करता है, यदि उपलब्ध नहीं है तो उसका अनुकरण करता है।
$(document).on('load', handler)एक घटना है जिसे सभी संसाधनों को सर्वर से लोड किए जाने के बाद निकाल दिया जाएगा । अब चित्र लोड किए गए हैं। जबकि onload एक कच्चा HTML ईवेंट है, तैयार jQuery द्वारा बनाया गया है।
$(document).ready(handler)वास्तव में एक वादा है । कॉलिंग के समय दस्तावेज़ तैयार होने पर हैंडलर को तुरंत बुलाया जाएगा। अन्यथा यह ready-ईवेंट को बांधता है ।
JQuery 1.8 से पहले , $(document).load(handler)एक उपनाम के रूप में मौजूद था $(document).on('load',handler)।
$.fn.loadकि अब इवेंट बाइंडर के रूप में व्यवहार नहीं करता है। वास्तव में, यह 1.8 के बाद से आज्ञाकारिता है। मैंने इसे तदनुसार अपडेट किया
$(document).ready()एक है jQuery जबकि, घटना है जो जब HTML दस्तावेज़ पूरी तरह से लोड किया गया है तब होता है window.onloadघटना, बाद में तब होता है जब पृष्ठ पर सब कुछ शामिल है छवियों लोड।
इसके अलावा window.onload DOM में एक शुद्ध जावास्क्रिप्ट इवेंट है, जबकि $(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;
};
इसके अलावा, मैंने नीचे दिए गए चित्र को दोनों के लिए एक त्वरित संदर्भ के रूप में बनाया है:
window.onload: एक सामान्य जावास्क्रिप्ट घटना।
document.ready: एक विशिष्ट jQuery इवेंट जब संपूर्ण HTML लोड किया गया हो।
एक बात याद रखने की (या मुझे यह कहते हुए याद रखनी चाहिए) यह है कि आप उस onloadतरह से ढेर नहीं कर सकते जैसे आप कर सकते हैं ready। दूसरे शब्दों में, jQuery का जादू readyएक ही पृष्ठ पर कई एस की अनुमति देता है , लेकिन आप ऐसा नहीं कर सकते onload।
पिछले onloadकिसी भी पिछले onloads पर हावी हो जाएगा ।
इससे निपटने का एक अच्छा तरीका स्पष्ट रूप से एक साइमन विलीसन द्वारा लिखित फ़ंक्शन के साथ है और मल्टीपल जावास्क्रिप्ट ऑनलोड फंक्शंस का उपयोग करने में वर्णित है ।
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.readyHTML डॉक्यूमेंट लोड होने पर निष्पादित होता है।
$(document).ready(function() {
// Code to be executed
alert("Document is ready");
});
window.loadके लिए पृष्ठ पूरी तरह से लोड करने के लिए तथापि इंतजार करेंगे। इसमें आंतरिक फ़्रेम, चित्र आदि शामिल हैं।
$(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.onloadHTML पेज लोड होने पर ट्रिगर। window.onloadकेवल एक बार लिखा जा सकता है।
document.readyjQuery लाइब्रेरी का एक कार्य है। document.readyजब HTML और सभी जावास्क्रिप्ट कोड, CSS और HTML फ़ाइल में शामिल किए गए चित्र पूरी तरह से लोड हो जाते हैं।
document.readyआवश्यकताओं के अनुसार कई बार लिखा जा सकता है।
जब आप कहते हैं $(document).ready(f), आप स्क्रिप्ट इंजन को निम्न कार्य करने के लिए कहते हैं :
$और इसे चुनें, क्योंकि यह स्थानीय दायरे में नहीं है, इसे हैश टेबल लुकअप करना चाहिए, जिसमें टकराव हो सकता है या नहीं।readyचयनित ऑब्जेक्ट की कॉल , जिसमें विधि खोजने और इसे लागू करने के लिए चयनित ऑब्जेक्ट में एक और हैश टेबल लुकअप शामिल है।सबसे अच्छे मामले में, यह 2 हैश टेबल लुकअप है, लेकिन यह jQuery द्वारा किए गए भारी काम की अनदेखी कर रहा है, जहां $ के लिए सभी संभावित आदानों का किचन सिंक है, इसलिए हैंडलर को सही करने के लिए क्वेरी भेजने के लिए एक और नक्शा होने की संभावना है।
वैकल्पिक रूप से, आप ऐसा कर सकते हैं:
window.onload = function() {...}
जो होगा
onloadक्या कोई प्रॉपर्टी है या नहीं, हैश टेबल लुकअप करके, क्योंकि यह है, इसे फंक्शन की तरह कहा जाता है।सबसे अच्छे मामले में, यह एक एकल हैश टेबल लुकअप है, जो आवश्यक है क्योंकि प्राप्त किया onloadजाना चाहिए।
आदर्श रूप से, jQuery अपने प्रश्नों को उन स्ट्रिंग्स के लिए संकलित करेगा जिन्हें आप पेस्ट कर सकते हैं जो आप jQuery करना चाहते थे, लेकिन jQuery के रनटाइम प्रेषण के बिना। इस तरह आपके पास या तो एक विकल्प है
eval।window.onload DOM api द्वारा प्रदान किया गया है और यह कहता है कि "लोड घटना तब होती है जब किसी दिए गए संसाधन ने लोड किया हो"।
"दस्तावेज़ लोडिंग प्रक्रिया के अंत में लोड ईवेंट फायर हो जाता है। इस बिंदु पर, दस्तावेज़ में सभी ऑब्जेक्ट DOM में हैं, और सभी छवियों, स्क्रिप्ट, लिंक और उप-फ़्रेम ने लोडिंग समाप्त कर दी है।" डोम ऑनलोड
लेकिन jQuery में $ (दस्तावेज़) पहले से ही () केवल तभी चलेगा जब पेज डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM) जावास्क्रिप्ट कोड को निष्पादित करने के लिए तैयार हो। इसमें चित्र, स्क्रिप्ट, iframes आदि शामिल नहीं हैं jquery तैयार घटना
तो jquery तैयार विधि डोम ओनलोड घटना की तुलना में पहले चलेगी ।