fix for #4204, fadeTo shows hidden elements before animating
[jquery.git] / src / fx.js
index 3d00515..45c2389 100644 (file)
--- a/src/fx.js
+++ b/src/fx.js
@@ -46,12 +46,12 @@ jQuery.fn.extend({
                                        
                                        jQuery.data(this[i], "olddisplay", display);
                                }
+                       }
 
-                               // Set the display of the elements in a second loop
-                               // to avoid the constant reflow
-                               for ( var i = 0, l = this.length; i < l; i++ ){
-                                       this[i].style.display = jQuery.data(this[i], "olddisplay");
-                               }
+                       // Set the display of the elements in a second loop
+                       // to avoid the constant reflow
+                       for ( var i = 0, l = this.length; i < l; i++ ){
+                               this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
                        }
                        
                        return this;
@@ -95,7 +95,8 @@ jQuery.fn.extend({
        },
 
        fadeTo: function(speed,to,callback){
-               return this.animate({opacity: to}, speed, callback);
+               return this.filter(":hidden").css('opacity', 0).show().end()
+                                       .animate({opacity: to}, speed, callback);
        },
 
        animate: function( prop, speed, easing, callback ) {
@@ -285,7 +286,7 @@ jQuery.fx.prototype = {
 
                t.elem = this.elem;
 
-               if ( t() && jQuery.timers.push(t) == 1 ) {
+               if ( t() && jQuery.timers.push(t) && !timerId ) {
                        timerId = setInterval(function(){
                                var timers = jQuery.timers;
 
@@ -295,6 +296,7 @@ jQuery.fx.prototype = {
 
                                if ( !timers.length ) {
                                        clearInterval( timerId );
+                                       timerId = undefined;
                                }
                        }, 13);
                }