]> source.dussan.org Git - jquery.git/commitdiff
Effects: Don't overwrite display:none when .hide()ing hidden elements
authorRichard Gibson <richard.gibson@gmail.com>
Thu, 20 Mar 2014 07:39:36 +0000 (03:39 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Fri, 21 Mar 2014 03:01:39 +0000 (23:01 -0400)
Fixes #14848
Closes gh-1548
(cherry picked from commit 890d441aa5d319e49951ba6f0ec719cd4cb96759)

Conflicts:
src/effects.js

src/effects.js
test/unit/effects.js

index c843549c2095666e7f288da3bba54b5e1194b3c3..f6b6dbd770e548fc74d9757dc9efe2c97242173d 100644 (file)
@@ -160,11 +160,8 @@ function defaultPrefilter( elem, props, opts ) {
                // Set display property to inline-block for height/width
                // animations on inline elements that are having width/height animated
                display = jQuery.css( elem, "display" );
-               dDisplay = defaultDisplay( elem.nodeName );
-               if ( display === "none" ) {
-                       display = dDisplay;
-               }
-               if ( display === "inline" &&
+               // Test default display if display is currently "none"
+               if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" &&
                                jQuery.css( elem, "float" ) === "none" ) {
 
                        // inline-level elements accept inline-block;
@@ -204,6 +201,10 @@ function defaultPrefilter( elem, props, opts ) {
                                }
                        }
                        orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+               // Any non-fx value stops us from restoring the original display value
+               } else {
+                       display = undefined;
                }
        }
 
@@ -245,6 +246,10 @@ function defaultPrefilter( elem, props, opts ) {
                                }
                        }
                }
+
+       // If this is a noop like .hide().hide(), restore an overwritten display value
+       } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
+               style.display = display;
        }
 }
 
index ca075408369b56dfb970b41edda588dcd4f0f0dc..a2785145911d402bb8f79f105585850b7ef93c8c 100644 (file)
@@ -1672,6 +1672,19 @@ test( "hide, fadeOut and slideUp called on element width height and width = 0 sh
        this.clock.tick( 400 );
 });
 
+test( "hide should not leave hidden inline elements visible (#14848)", 2, function() {
+       var el = jQuery("#simon1");
+
+       el.hide( 1, function() {
+               equal( el.css( "display" ), "none", "hidden" );
+               el.hide( 1, function() {
+                       equal( el.css( "display" ), "none", "still hidden" );
+               });
+       });
+
+       this.clock.tick( 100 );
+});
+
 test( "Handle queue:false promises", 10, function() {
        var foo = jQuery( "#foo" ).clone().andSelf(),
                step = 1;