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 .
This commit is contained in:
parent
bbd9c776ea
commit
14193e449e
3 changed files with 24 additions and 18 deletions
18
src/core.js
18
src/core.js
|
@ -374,15 +374,19 @@ jQuery.extend({
|
|||
// the ready event fires. See #6781
|
||||
readyWait: 1,
|
||||
|
||||
// Hold (or release) the ready event
|
||||
holdReady: function( hold ) {
|
||||
if ( hold ) {
|
||||
jQuery.readyWait++;
|
||||
} else {
|
||||
jQuery.ready( true );
|
||||
}
|
||||
},
|
||||
|
||||
// Handle when the DOM is ready
|
||||
ready: function( wait ) {
|
||||
// A third-party is pushing the ready event forwards
|
||||
if ( wait === true ) {
|
||||
jQuery.readyWait--;
|
||||
}
|
||||
|
||||
// Make sure that the DOM is not already loaded
|
||||
if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) {
|
||||
// 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 );
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue