Making sure that you can bind multiple toggles to a single element without problems...
[jquery.git] / src / event.js
index 055de72..e2087cc 100644 (file)
@@ -693,13 +693,14 @@ jQuery.fn.extend({
 
                return this.click( jQuery.event.proxy( fn, function( event ) {
                        // Figure out which function to execute
-                       this.lastToggle = ( this.lastToggle || 0 ) % i;
+                       var lastToggle = ( jQuery.data( this, 'lastToggle' + fn.guid ) || 0 ) % i;
+                       jQuery.data( this, 'lastToggle' + fn.guid, lastToggle + 1 );
 
                        // Make sure that clicks stop
                        event.preventDefault();
 
                        // and execute the function
-                       return args[ this.lastToggle++ ].apply( this, arguments ) || false;
+                       return args[ lastToggle ].apply( this, arguments ) || false;
                }));
        },
 
@@ -791,6 +792,10 @@ jQuery.extend({
        ready: function() {
                // Make sure that the DOM is not already loaded
                if ( !jQuery.isReady ) {
+                       if ( !document.body ) {
+                               return setTimeout( jQuery.ready, 13 );
+                       }
+
                        // Remember that the DOM is ready
                        jQuery.isReady = true;
 
@@ -838,7 +843,7 @@ function bindReady() {
                // maybe late but safe also for iframes
                document.attachEvent("onreadystatechange", function() {
                        // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                       if ( document.readyState === "complete" && document.body ) {
+                       if ( document.readyState === "complete" ) {
                                document.detachEvent( "onreadystatechange", arguments.callee );
                                jQuery.ready();
                        }