Only bind .ready() once per instance of jQuery - and only bind if the ready() method is actually called (nothing is bound if window/load is used).

This commit is contained in:
John Resig 2007-08-22 06:51:41 +00:00
parent 3fb4779abb
commit f53aa62fd3
2 changed files with 12 additions and 3 deletions

View file

@ -529,6 +529,9 @@ jQuery.fn.extend({
* @see $(Function) * @see $(Function)
*/ */
ready: function(f) { ready: function(f) {
// Attach the listeners
bindReady();
// If the DOM is already ready // If the DOM is already ready
if ( jQuery.isReady ) if ( jQuery.isReady )
// Execute the function immediately // Execute the function immediately
@ -929,6 +932,12 @@ jQuery.extend({
}); });
var readyBound = false;
function bindReady(){
if ( readyBound ) return;
readyBound = true;
// If Mozilla is used // If Mozilla is used
if ( jQuery.browser.mozilla || jQuery.browser.opera ) if ( jQuery.browser.mozilla || jQuery.browser.opera )
// Use the handy event callback // Use the handy event callback
@ -974,3 +983,4 @@ jQuery.extend({
// A fallback to window.onload, that will always work // A fallback to window.onload, that will always work
jQuery.event.add( window, "load", jQuery.ready ); jQuery.event.add( window, "load", jQuery.ready );
}

View file

@ -1,2 +1 @@
// prevent execution of jQuery if included more than once (function(){
if ( typeof jQuery == "undefined" ) (function(){