7474 return letter . toUpperCase ( ) ;
7575 } ,
7676
77- // The ready event handler and self cleanup method
78- DOMContentLoaded = function ( ) {
79- if ( document . addEventListener ) {
80- document . removeEventListener ( "DOMContentLoaded" , DOMContentLoaded , false ) ;
81- jQuery . ready ( ) ;
82- } else if ( document . readyState === "complete" ) {
83- // we're here because readyState === "complete" in oldIE
84- // which is good enough for us to call the dom ready!
85- document . detachEvent ( "onreadystatechange" , DOMContentLoaded ) ;
77+ // The ready event handler
78+ completed = function ( event ) {
79+
80+ // readyState === "complete" is good enough for us to call the dom ready in oldIE
81+ if ( document . addEventListener || event . type === "load" || document . readyState === "complete" ) {
82+ detach ( ) ;
8683 jQuery . ready ( ) ;
8784 }
85+ } ,
86+ // Clean-up method for dom ready events
87+ detach = function ( ) {
88+ if ( document . addEventListener ) {
89+ document . removeEventListener ( "DOMContentLoaded" , completed , false ) ;
90+ window . removeEventListener ( "load" , completed , false ) ;
91+
92+ } else {
93+ document . detachEvent ( "onreadystatechange" , completed ) ;
94+ window . detachEvent ( "onload" , completed ) ;
95+ }
8896 } ;
8997
9098jQuery . fn = jQuery . prototype = {
@@ -869,18 +877,18 @@ jQuery.ready.promise = function( obj ) {
869877 // Standards-based browsers support DOMContentLoaded
870878 } else if ( document . addEventListener ) {
871879 // Use the handy event callback
872- document . addEventListener ( "DOMContentLoaded" , DOMContentLoaded , false ) ;
880+ document . addEventListener ( "DOMContentLoaded" , completed , false ) ;
873881
874882 // A fallback to window.onload, that will always work
875- window . addEventListener ( "load" , jQuery . ready , false ) ;
883+ window . addEventListener ( "load" , completed , false ) ;
876884
877885 // If IE event model is used
878886 } else {
879887 // Ensure firing before onload, maybe late but safe also for iframes
880- document . attachEvent ( "onreadystatechange" , DOMContentLoaded ) ;
888+ document . attachEvent ( "onreadystatechange" , completed ) ;
881889
882890 // A fallback to window.onload, that will always work
883- window . attachEvent ( "onload" , jQuery . ready ) ;
891+ window . attachEvent ( "onload" , completed ) ;
884892
885893 // If IE and not a frame
886894 // continually check to see if the document is ready
@@ -902,6 +910,9 @@ jQuery.ready.promise = function( obj ) {
902910 return setTimeout ( doScrollCheck , 50 ) ;
903911 }
904912
913+ // detach all dom ready events
914+ detach ( ) ;
915+
905916 // and execute any waiting functions
906917 jQuery . ready ( ) ;
907918 }
0 commit comments