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.
This commit is contained in:
parent
7066bb384b
commit
6ab402dced
21
src/effects.js
vendored
21
src/effects.js
vendored
|
@ -15,28 +15,39 @@ var elemdisplay = {},
|
||||||
|
|
||||||
jQuery.fn.extend({
|
jQuery.fn.extend({
|
||||||
show: function( speed, easing, callback ) {
|
show: function( speed, easing, callback ) {
|
||||||
|
var elem, display;
|
||||||
|
|
||||||
if ( speed || speed === 0 ) {
|
if ( speed || speed === 0 ) {
|
||||||
return this.animate( genFx("show", 3), speed, easing, callback);
|
return this.animate( genFx("show", 3), speed, easing, callback);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
for ( var i = 0, j = this.length; i < j; i++ ) {
|
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
|
// Reset the inline display of this element to learn if it is
|
||||||
// being hidden by cascaded rules or not
|
// being hidden by cascaded rules or not
|
||||||
if ( !jQuery.data(this[i], "olddisplay") && this[i].style.display === "none" ) {
|
if ( !jQuery.data(elem, "olddisplay") && display === "none" ) {
|
||||||
this[i].style.display = "";
|
elem.style.display = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set elements which have been overridden with display: none
|
// Set elements which have been overridden with display: none
|
||||||
// in a stylesheet to whatever the default browser style is
|
// in a stylesheet to whatever the default browser style is
|
||||||
// for such an element
|
// for such an element
|
||||||
if ( this[i].style.display === "" && jQuery.css( this[i], "display" ) === "none" ) {
|
if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
|
||||||
jQuery.data(this[i], "olddisplay", defaultDisplay(this[i].nodeName));
|
jQuery.data(elem, "olddisplay", defaultDisplay(elem.nodeName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the display of most of the elements in a second loop
|
// Set the display of most of the elements in a second loop
|
||||||
// to avoid the constant reflow
|
// to avoid the constant reflow
|
||||||
for ( i = 0; i < j; i++ ) {
|
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;
|
return this;
|
||||||
|
|
15
test/unit/effects.js
vendored
15
test/unit/effects.js
vendored
|
@ -6,7 +6,20 @@ test("sanity check", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("show()", 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");
|
var pass = true, div = jQuery("#main div");
|
||||||
div.show().each(function(){
|
div.show().each(function(){
|
||||||
if ( this.style.display == "none" ) pass = false;
|
if ( this.style.display == "none" ) pass = false;
|
||||||
|
|
Loading…
Reference in a new issue