From 3486365062cdc7e8598cea238e67aafa33af7dce Mon Sep 17 00:00:00 2001 From: timmywil Date: Wed, 11 May 2011 14:31:42 -0400 Subject: [PATCH] Animation callbacks keep their place in the queue stack. Fixes #9220. --- src/effects.js | 8 ++++---- test/unit/queue.js | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/effects.js b/src/effects.js index 38d5a0119..e179c3e3c 100644 --- a/src/effects.js +++ b/src/effects.js @@ -330,15 +330,15 @@ jQuery.extend({ // Queueing opt.old = opt.complete; opt.complete = function( noUnmark ) { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + if ( opt.queue !== false ) { jQuery.dequeue( this ); } else if ( noUnmark !== false ) { jQuery._unmark( this ); } - - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } }; return opt; diff --git a/test/unit/queue.js b/test/unit/queue.js index 9b612ce37..c5c387a48 100644 --- a/test/unit/queue.js +++ b/test/unit/queue.js @@ -107,7 +107,31 @@ test("queue() passes in the next item in the queue as a parameter to fx queues", equals(counter, 2, "Deferreds resolved"); start(); }); +}); + +test("callbacks keep their place in the queue", function() { + expect(5); + stop(); + var div = jQuery("
"), + counter = 0; + + div.queue(function( next ) { + equal( ++counter, 1, "Queue/callback order: first called" ); + setTimeout( next, 200 ); + }).show(100, function() { + equal( ++counter, 2, "Queue/callback order: second called" ); + jQuery(this).hide(100, function() { + equal( ++counter, 4, "Queue/callback order: fourth called" ); + }); + }).queue(function( next ) { + equal( ++counter, 3, "Queue/callback order: third called" ); + next(); + }); + div.promise("fx").done(function() { + equals(counter, 4, "Deferreds resolved"); + start(); + }); }); test("delay()", function() { -- 2.39.5