নন-জিকুয়ের সমতুল্য কী $(document).ready()
?
$(document).ready()
- Books.google.com/… । এটি addEvent
ডিন এডওয়ার্ডস দ্বারা রচিত ইভেন্টের বাঁধাই বিমূর্ততাও ব্যবহার করে , যার কোডটি
নন-জিকুয়ের সমতুল্য কী $(document).ready()
?
$(document).ready()
- Books.google.com/… । এটি addEvent
ডিন এডওয়ার্ডস দ্বারা রচিত ইভেন্টের বাঁধাই বিমূর্ততাও ব্যবহার করে , যার কোডটি
উত্তর:
সুন্দর জিনিস সম্পর্কে $(document).ready()
এটি আগুন আগে window.onload
। বাহ্যিক সম্পদ এবং চিত্র সহ সবকিছু লোড না হওয়া পর্যন্ত লোড ফাংশনটি অপেক্ষা করে। $(document).ready
যাইহোক, DOM গাছ সম্পূর্ণ হয়ে গেলে এবং ম্যানিপুলেট করা যায় তখন আগুন লাগে। আপনি যদি jQuery ছাড়াই DOM প্রস্তুত করতে চান তবে আপনি এই লাইব্রেরিতে চেক করতে পারেন। কেউ ready
jQuery থেকে মাত্র অংশটি বের করেছেন । এটি সুন্দর এবং ছোট এবং আপনি এটি দরকারী মনে করতে পারেন:
এটি ECMA থেকে পুরোপুরি কাজ করে
document.addEventListener("DOMContentLoaded", function() {
// code...
});
window.onload
JQuery থেকে সমান না $(document).ready
কারণ $(document).ready
শুধুমাত্র DOM গাছ থেকে অপেক্ষা করছে যখন window.onload
বাইরের সম্পদ এবং ইমেজ সহ সব উপাদান পরীক্ষা করুন।
সম্পাদনা : আইএন 8 এবং আরও পুরানো সমতুল্য, জ্যান ডার্কের পর্যবেক্ষণের জন্য ধন্যবাদ । আপনি এই লিঙ্কটিতে MDN এ এই কোডটির উত্স পড়তে পারেন :
// alternative to DOMContentLoaded
document.onreadystatechange = function () {
if (document.readyState == "interactive") {
// Initialize your application or run some code.
}
}
এ ছাড়াও অন্যান্য বিকল্প রয়েছে "interactive"
। বিশদ জন্য MDN লিঙ্ক দেখুন ।
document.addEventListener("DOMContentLoaded",function(){console.log(123)})
এখনই চেষ্টা করুন
একটা ছোট জিনিস আমি একসাথে রেখেছি
domready.js
(function(exports, d) {
function domReady(fn, context) {
function onReady(event) {
d.removeEventListener("DOMContentLoaded", onReady);
fn.call(context || exports, event);
}
function onReadyIe(event) {
if (d.readyState === "complete") {
d.detachEvent("onreadystatechange", onReadyIe);
fn.call(context || exports, event);
}
}
d.addEventListener && d.addEventListener("DOMContentLoaded", onReady) ||
d.attachEvent && d.attachEvent("onreadystatechange", onReadyIe);
}
exports.domReady = domReady;
})(window, document);
এটি কিভাবে ব্যবহার করতে
<script src="domready.js"></script>
<script>
domReady(function(event) {
alert("dom is ready!");
});
</script>
আপনি যে প্রসঙ্গে কলম্বব্যাকটি দ্বিতীয় তর্কটি পাস করে চলে তাও আপনি পরিবর্তন করতে পারেন
function init(event) {
alert("check the console");
this.log(event);
}
domReady(init, console);
এখন এটি 2018 এখানে একটি দ্রুত এবং সহজ পদ্ধতি।
এটি ইভেন্ট শ্রোতাদের যুক্ত করবে, তবে এটি ইতিমধ্যে বরখাস্ত করা থাকলে আমরা পরীক্ষা করব যে ডোমটি প্রস্তুত অবস্থায় আছে বা এটি সম্পূর্ণ। উপ-সংস্থানগুলি লোডিং শেষ করার আগে বা পরে এটি আগুন দিতে পারে (চিত্র, স্টাইলশিট, ফ্রেম ইত্যাদি)।
function domReady(fn) {
// If we're early to the party
document.addEventListener("DOMContentLoaded", fn);
// If late; I mean on time.
if (document.readyState === "interactive" || document.readyState === "complete" ) {
fn();
}
}
domReady(() => console.log("DOM is ready, come and get it!"));
স্ট্যান্ডার্ড ES6 আমদানি ও রফতানি ব্যবহার করে এখানে কিছু দ্রুত ইউটিলিটি সহায়ক রয়েছে যা আমি লিখেছিলাম যাতে টাইপস্ক্রিপ্টও অন্তর্ভুক্ত থাকে। সম্ভবত আমি এগুলি একটি দ্রুত লাইব্রেরি তৈরি করতে পারি যা নির্ভরতা হিসাবে প্রকল্পগুলিতে ইনস্টল করা যেতে পারে।
export const domReady = (callBack) => {
if (document.readyState === "loading") {
document.addEventListener('DOMContentLoaded', callBack);
}
else {
callBack();
}
}
export const windowReady = (callBack) => {
if (document.readyState === 'complete') {
callBack();
}
else {
window.addEventListener('load', callBack);
}
}
export const domReady = (callBack: () => void) => {
if (document.readyState === "loading") {
document.addEventListener('DOMContentLoaded', callBack);
}
else {
callBack();
}
}
export const windowReady = (callBack: () => void) => {
if (document.readyState === 'complete') {
callBack();
}
else {
window.addEventListener('load', callBack);
}
}
export const domReady = new Promise(resolve => {
if (document.readyState === "loading") {
document.addEventListener('DOMContentLoaded', resolve);
}
else {
resolve();
}
});
export const windowReady = new Promise(resolve => {
if (document.readyState === 'complete') {
resolve();
}
else {
window.addEventListener('load', resolve);
}
});
Http://youmightnotneedjquery.com/ এর মতে একটি দুর্দান্ত প্রতিস্থাপন যা এখনও আই 8 এর সাথে কাজ করে
function ready(fn) {
if (document.readyState != 'loading') {
fn();
} else if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', fn);
} else {
document.attachEvent('onreadystatechange', function() {
if (document.readyState != 'loading')
fn();
});
}
}
// test
window.ready(function() {
alert('it works');
});
উন্নতি : ব্যক্তিগতভাবে আমি এটিও পরীক্ষা করে দেখব যে এর ধরণটি fn
কোনও ফাংশন কিনা। এবং যেমন এলিওট্রেগান পরামর্শ দিয়েছেন ব্যবহারের পরে ইভেন্ট শ্রোতাদের সরানোর জন্য।
আমি এই প্রশ্নের দেরি করার কারণটি হ'ল কারণ আমি এই উত্তরটি অনুসন্ধান করেছিলাম কিন্তু এখানে এটি খুঁজে পাইনি। এবং আমি মনে করি এটিই সেরা সমাধান।
একটি স্ট্যান্ডার্ড ভিত্তিক প্রতিস্থাপন রয়েছে, DOMContentLoADed যা 90% এর বেশি ব্রাউজার দ্বারা সমর্থিত হয়, তবে IE8 নয় (ব্রাউজার সমর্থনের জন্য JQuery দ্বারা কোড ব্যবহারের নীচে) :
document.addEventListener("DOMContentLoaded", function(event) {
//do work
});
নীচের চিত্রিত হিসাবে jQuery এর নেটিভ ফাংশনটি কেবল উইন্ডো.অনলোডের চেয়ে অনেক বেশি জটিল।
function bindReady(){
if ( readyBound ) return;
readyBound = true;
// Mozilla, Opera and webkit nightlies currently support this event
if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", function(){
document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
jQuery.ready();
}, false );
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", function(){
if ( document.readyState === "complete" ) {
document.detachEvent( "onreadystatechange", arguments.callee );
jQuery.ready();
}
});
// If IE and not an iframe
// continually check to see if the document is ready
if ( document.documentElement.doScroll && window == window.top ) (function(){
if ( jQuery.isReady ) return;
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
document.documentElement.doScroll("left");
} catch( error ) {
setTimeout( arguments.callee, 0 );
return;
}
// and execute any waiting functions
jQuery.ready();
})();
}
// A fallback to window.onload, that will always work
jQuery.event.add( window, "load", jQuery.ready );
}
DOMContentLoaded
এবং load
ইভেন্টগুলি রয়েছে addEventListener
এবং প্রথমটি যে আগুন উভয় শ্রোতাকে সরিয়ে দেয়, তাই এটি দুটি বার আগুন না দেয়।
কোন লাইব্রেরি সহ প্লেন ভ্যানিলা জাভাস্ক্রিপ্টে? এটি একটি ত্রুটি। $
কেবল একটি সনাক্তকারী, এবং আপনি এটি সংজ্ঞায়িত না করে অপরিজ্ঞাত।
jQuery $
এর নিজস্ব "সবকিছু অবজেক্ট" হিসাবে সংজ্ঞা দেয় ( jQuery
এটি অন্যান্য গ্রন্থাগারের সাথে বিরোধ না করে আপনি এটি ব্যবহার করতে পারেন বলেও পরিচিত )। আপনি যদি jQuery ব্যবহার করেন না (বা এটির সংজ্ঞা দেয় এমন কোনও গ্রন্থাগার), তবে $
সংজ্ঞায়িত হবে না।
অথবা আপনি জিজ্ঞাসা করছেন সমতল জাভাস্ক্রিপ্টে সমতুল্য কি? window.onload
সেক্ষেত্রে আপনি সম্ভবত এটি চাইবেন যা হুবহু সমতুল্য নয়, তবে ভ্যানিলা জাভাস্ক্রিপ্টে একই প্রভাবটির নিকটবর্তী হওয়ার দ্রুত এবং সহজতম উপায়।
সাম্প্রতিক ব্রাউজারে সহজ পদ্ধিতি হল উপায় উপযুক্ত ব্যবহার করতে হবে GlobalEventHandlers , onDOMContentLoaded , লোড থাকলে , onloadeddata (...)
onDOMContentLoaded = (function(){ console.log("DOM ready!") })()
onload = (function(){ console.log("Page fully loaded!") })()
onloadeddata = (function(){ console.log("Data loaded!") })()
প্রারম্ভিক এইচটিএমএল ডকুমেন্টটি লোড শেষ করার জন্য স্টাইলশিট, চিত্র এবং সাবফ্রেমগুলির জন্য অপেক্ষা না করে সম্পূর্ণ HTML লোড এবং পার্স করা হয়ে গেলে DOMContentLoaded ইভেন্টটি বরখাস্ত করা হয়। খুব সম্পূর্ণ ইভেন্ট লোড কেবল একটি সম্পূর্ণ-লোড হওয়া পৃষ্ঠা সনাক্ত করতে ব্যবহার করা উচিত। লোড ব্যবহার করা এটি একটি অবিশ্বাস্যরকম জনপ্রিয় ভুল যেখানে ডমকন্টেন্টলয়েড আরও বেশি উপযুক্ত হবে, তাই সাবধান হন।
https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
ব্যবহৃত ফাংশন একটি আইআইএফই, এই ক্ষেত্রে খুব দরকারী কারণ এটি প্রস্তুত হওয়ার সময় এটি নিজেই ট্রিগার করে:
https://en.wikipedia.org/wiki/Immediately-invoked_function_expression
যে কোনও স্ক্রিপ্টের শেষে এটি স্থাপন করা স্পষ্টতই আরও উপযুক্ত।
ES6 এ, আমরা এটি একটি তীর ফাংশন হিসাবেও লিখতে পারি:
onload = (() => { console.log("ES6 page fully loaded!") })()
DOM উপাদান ব্যবহার করা সবচেয়ে ভাল, আমরা কোনও পরিবর্তনশীল প্রস্তুত হওয়ার জন্য অপেক্ষা করতে পারি, এটি একটি তীরযুক্ত আইআইএফই ট্রিগার করে।
আচরণ একই হবে, তবে কম স্মৃতি প্রভাবের সাথে।
অনেক ক্ষেত্রে দস্তাবেজ অবজেক্টটি কমপক্ষে আমার ব্রাউজারে প্রস্তুত হওয়ার পরেও ট্রিগার করে। বাক্য গঠনটি তখন খুব দুর্দান্ত, তবে এটি সামঞ্জস্যতা সম্পর্কে আরও পরীক্ষা প্রয়োজন।
document=(()=>{ /*Ready*/ })()
$(document).ready()
কোনও লাইব্রেরি ব্যবহার না করে jQuery এর ইভেন্টটি পুনরুত্পাদন করতে চান তবে এটিকে একবার দেখুন: stackoverflow.com/questions/1795089/…