aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarl Swedberg <kswedberg@gmail.com>2010-10-26 14:37:44 -0700
committerJohn Resig <jeresig@gmail.com>2010-10-26 14:37:44 -0700
commit6ab402dced3339d24ad007ecf3a6c3f5af3e7610 (patch)
tree785dab95e0f7caf5c4c9f269b328e02c55c228e0
parent7066bb384bb4b6e91dac787642f616a4dbc475e5 (diff)
downloadjquery-6ab402dced3339d24ad007ecf3a6c3f5af3e7610.tar.gz
jquery-6ab402dced3339d24ad007ecf3a6c3f5af3e7610.zip
For .show() with no arguments, only set display of elements in the second loop if they don't have style.display already set or if style.display isn't none. Fixes #7315.
-rw-r--r--src/effects.js21
-rw-r--r--test/unit/effects.js15
2 files changed, 30 insertions, 6 deletions
diff --git a/src/effects.js b/src/effects.js
index 44a7942e3..b73aa7247 100644
--- a/src/effects.js
+++ b/src/effects.js
@@ -15,28 +15,39 @@ var elemdisplay = {},
jQuery.fn.extend({
show: function( speed, easing, callback ) {
+ var elem, display;
+
if ( speed || speed === 0 ) {
return this.animate( genFx("show", 3), speed, easing, callback);
+
} else {
for ( var i = 0, j = this.length; i < j; i++ ) {
+ elem = this[i];
+ display = elem.style.display;
+
// Reset the inline display of this element to learn if it is
// being hidden by cascaded rules or not
- if ( !jQuery.data(this[i], "olddisplay") && this[i].style.display === "none" ) {
- this[i].style.display = "";
+ if ( !jQuery.data(elem, "olddisplay") && display === "none" ) {
+ elem.style.display = "";
}
// Set elements which have been overridden with display: none
// in a stylesheet to whatever the default browser style is
// for such an element
- if ( this[i].style.display === "" && jQuery.css( this[i], "display" ) === "none" ) {
- jQuery.data(this[i], "olddisplay", defaultDisplay(this[i].nodeName));
+ if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+ jQuery.data(elem, "olddisplay", defaultDisplay(elem.nodeName));
}
}
// Set the display of most of the elements in a second loop
// to avoid the constant reflow
for ( i = 0; i < j; i++ ) {
- this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
+ elem = this[i];
+ display = elem.style.display;
+
+ if ( display === "" || display === "none" ) {
+ elem.style.display = jQuery.data(elem, "olddisplay") || "";
+ }
}
return this;
diff --git a/test/unit/effects.js b/test/unit/effects.js
index 952afc5b1..0114b0f4c 100644
--- a/test/unit/effects.js
+++ b/test/unit/effects.js
@@ -6,7 +6,20 @@ test("sanity check", function() {
});
test("show()", function() {
- expect(23);
+ expect(26);
+
+ var hiddendiv = jQuery("div.hidden");
+
+ equal(jQuery.css( hiddendiv[0], "display"), "none", "hiddendiv is display: none");
+
+ hiddendiv.css("display", "block");
+ equal(jQuery.css( hiddendiv[0], "display"), "block", "hiddendiv is display: block");
+
+ hiddendiv.show();
+ equal(jQuery.css( hiddendiv[0], "display"), "block", "hiddendiv is display: block");
+
+ hiddendiv.css("display","");
+
var pass = true, div = jQuery("#main div");
div.show().each(function(){
if ( this.style.display == "none" ) pass = false;