]> source.dussan.org Git - jquery.git/commitdiff
Animation callbacks keep their place in the queue stack. Fixes #9220.
authortimmywil <tim.willison@thisismedium.com>
Wed, 11 May 2011 18:31:42 +0000 (14:31 -0400)
committertimmywil <tim.willison@thisismedium.com>
Fri, 13 May 2011 15:56:55 +0000 (11:56 -0400)
src/effects.js
test/unit/queue.js

index 38d5a0119dd48c828912cabdaefd9dbc3cbdd335..e179c3e3c1feeb0552341ecfd37bd70ee754b177 100644 (file)
@@ -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;
index 9b612ce37eef59fc09b4695e05cc6fc4d6860a9d..c5c387a48583cb40ce31325e5e56e945ee84191b 100644 (file)
@@ -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("<div>"),
+               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() {