aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/unit/effects/effects_core.js12
-rw-r--r--ui/jquery.effects.core.js15
2 files changed, 23 insertions, 4 deletions
diff --git a/tests/unit/effects/effects_core.js b/tests/unit/effects/effects_core.js
index fd6b4d378..f78aea304 100644
--- a/tests/unit/effects/effects_core.js
+++ b/tests/unit/effects/effects_core.js
@@ -19,6 +19,18 @@ var minDuration = 15,
module( "effects.core" );
+test( "Immediate Return Conditions", function() {
+ var hidden = $( "div.hidden" ),
+ count = 0;
+ expect( 6 );
+ hidden.hide( "blind", function() {
+ equal( ++count, 1, "Hide on hidden returned immediately" );
+ }).show().show( "blind", function() {
+ equal( ++count, 2, "Show on shown returned immediately" );
+ });
+ equal( ++count, 3, "Both Functions worked properly" );
+});
+
$.each( $.effects.effect, function( effect ) {
if ( effect === "transfer" ) {
return;
diff --git a/ui/jquery.effects.core.js b/ui/jquery.effects.core.js
index 330ddd83c..b08cd6cf4 100644
--- a/ui/jquery.effects.core.js
+++ b/ui/jquery.effects.core.js
@@ -556,19 +556,26 @@ $.fn.extend({
}
function run( next ) {
- var elem = this,
- complete = args.complete;
+ var elem = $( this ),
+ complete = args.complete,
+ mode = args.mode;
function done() {
if ( $.isFunction( complete ) ) {
- complete.call( elem );
+ complete.call( elem[0] );
}
if ( $.isFunction( next ) ) {
next();
}
}
- effectMethod.call( elem, args, done );
+ // if the element is hiddden and mode is hide,
+ // or element is visible and mode is show
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+ done();
+ } else {
+ effectMethod.call( elem[0], args, done );
+ }
}
// TODO: remove this check in 2.0, effectMethod will always be true