From 14193e449efe76105df61d745ebd7031dd7fe783 Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Wed, 2 Feb 2011 21:57:44 -0500 Subject: [PATCH] Create jQuery.holdReady(true/false) method to encapsulate jQuery.readyWait++ / jQuery.ready(true) logic. Fix problem where jQuery.ready may trigger twice, causing the (unsupported) document.onready to run twice. Fixes #8803 . --- src/core.js | 18 +++++++++++------- test/data/readywaitloader.js | 6 +++--- test/readywait.html | 18 ++++++++++-------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/core.js b/src/core.js index a893fc9b3..b81fa7644 100644 --- a/src/core.js +++ b/src/core.js @@ -374,15 +374,19 @@ jQuery.extend({ // the ready event fires. See #6781 readyWait: 1, - // Handle when the DOM is ready - ready: function( wait ) { - // A third-party is pushing the ready event forwards - if ( wait === true ) { - jQuery.readyWait--; + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); } + }, - // Make sure that the DOM is not already loaded - if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready, 1 ); diff --git a/test/data/readywaitloader.js b/test/data/readywaitloader.js index 483e07c4d..e07dac7a9 100644 --- a/test/data/readywaitloader.js +++ b/test/data/readywaitloader.js @@ -1,14 +1,14 @@ -// Simple script loader that uses jQuery.readyWait +// Simple script loader that uses jQuery.readyWait via jQuery.holdReady() //Hold on jQuery! -jQuery.readyWait++; +jQuery.holdReady(true); var readyRegExp = /^(complete|loaded)$/; function assetLoaded( evt ){ var node = evt.currentTarget || evt.srcElement; if ( evt.type === "load" || readyRegExp.test(node.readyState) ) { - jQuery.ready(true); + jQuery.holdReady(false); } } diff --git a/test/readywait.html b/test/readywait.html index 4f124767a..b4d8111eb 100644 --- a/test/readywait.html +++ b/test/readywait.html @@ -1,13 +1,13 @@ - jQuery.readyWait Test + jQuery.holdReady Test