Skip to content

Instantly share code, notes, and snippets.

@miguel-perez
Last active January 29, 2023 18:04
Show Gist options
  • Star 20 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save miguel-perez/476046a42d229251fec3 to your computer and use it in GitHub Desktop.
Save miguel-perez/476046a42d229251fec3 to your computer and use it in GitHub Desktop.
How to add the ability to re-run $(document).ready() functions
/**
* Replace jQuery's $.fn.ready() function with a mod exec
*
* Sites that make heavy use of the $(document).ready function
* are generally incompatable with asynchrounous content. The
* the $.fn.ready function only runs once. This script replaces
* the ready function with a module execution controller that
* let's us register functions and execute all of the functions
* as we need them. This is useful after HTML gets injected on the
* page and we want to rebind functionally to the new content.
*
* @author Miguel Ángel Pérez reachme@miguel-perez.com
* @note Should be placed directly after jQuery on the page
*
*/
;(function($){
var $doc = $(document);
/** create mod exec controller */
$.readyFn = {
list: [],
register: function(fn) {
$.readyFn.list.push(fn);
},
execute: function() {
for (var i = 0; i < $.readyFn.list.length; i++) {
try {
$.readyFn.list[i].apply(document, [$]);
}
catch (e) {
throw e;
}
};
}
};
/** run all functions */
$doc.ready(function(){
$.readyFn.execute();
});
/** register function */
$.fn.ready = function(fn) {
$.readyFn.register(fn);
};
})(jQuery);
// To re-run the ready functions just use `$.readyFn.execute();`
// after the new HTML has been injected into the page.
@spencersmb
Copy link

@whiskeysauer Where did you put the "Master" document.ready function in relation to the smoothstate function? Could I look at how you set your file up by chance? Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment