Categories
Useful

jQuery On Load and Ready not firing for dynamically loaded content ?

Trying to distribute the resources loaded on a page through a function that loads the JavaScript as dynamic files and not all at once, I ran into a problem: None of the following function calls was useful for dynamic scripts:

  • .on (“load”, handler)
  • .on (“ready”, handler)
  • $ (document) .ready (handler)
  • $ (window) .load (handler)
  • window.onload = handler
  • document.addEventListener (“DOMContentLoaded”, handler)

I searched all over the internet, and found all sorts of similar problems:

  • jQuery document.ready() not firing for dynamically loaded content ?
  • Why isn’t DOM ready working for my scripts?
  • How to bind dynamic content to document-ready events?
  • Script not loading when added dynamically with jQuery ?

but nowhere could I find an answer and I could barely find a satisfactory solution to my problem !

Now to clarify the problem and expose the solution, here is the original code:

$(window).on('load',function(){ 
	codeToRun();
});

And here is actually what I changed:

if (document.readyState === 'complete') {
	codeToRun();
} else {
	$(window).on('load',function(){
		codeToRun();
	});
}

This solution actually solves two problems: it retains compatibility with the variant when the code is loadedĀ normal or with defer attribute, but also when it is loaded dynamically or using async.

So, this is the simple and practical solution if you want to run javascript code immediately after loading a javascript file, even if the html page has been fully loaded and ready long before!

Leave a Reply

Your email address will not be published. Required fields are marked *