74
74
return letter . toUpperCase ( ) ;
75
75
} ,
76
76
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 ( ) ;
86
83
jQuery . ready ( ) ;
87
84
}
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
+ }
88
96
} ;
89
97
90
98
jQuery . fn = jQuery . prototype = {
@@ -869,18 +877,18 @@ jQuery.ready.promise = function( obj ) {
869
877
// Standards-based browsers support DOMContentLoaded
870
878
} else if ( document . addEventListener ) {
871
879
// Use the handy event callback
872
- document . addEventListener ( "DOMContentLoaded" , DOMContentLoaded , false ) ;
880
+ document . addEventListener ( "DOMContentLoaded" , completed , false ) ;
873
881
874
882
// A fallback to window.onload, that will always work
875
- window . addEventListener ( "load" , jQuery . ready , false ) ;
883
+ window . addEventListener ( "load" , completed , false ) ;
876
884
877
885
// If IE event model is used
878
886
} else {
879
887
// Ensure firing before onload, maybe late but safe also for iframes
880
- document . attachEvent ( "onreadystatechange" , DOMContentLoaded ) ;
888
+ document . attachEvent ( "onreadystatechange" , completed ) ;
881
889
882
890
// A fallback to window.onload, that will always work
883
- window . attachEvent ( "onload" , jQuery . ready ) ;
891
+ window . attachEvent ( "onload" , completed ) ;
884
892
885
893
// If IE and not a frame
886
894
// continually check to see if the document is ready
@@ -902,6 +910,9 @@ jQuery.ready.promise = function( obj ) {
902
910
return setTimeout ( doScrollCheck , 50 ) ;
903
911
}
904
912
913
+ // detach all dom ready events
914
+ detach ( ) ;
915
+
905
916
// and execute any waiting functions
906
917
jQuery . ready ( ) ;
907
918
}
0 commit comments