diff options
author | louisremi <louisremi@louisremi-laptop.(none)> | 2011-05-10 11:22:12 -0400 |
---|---|---|
committer | John Resig <jeresig@gmail.com> | 2011-05-10 11:22:12 -0400 |
commit | 521ae562daa8f95def8872a55a260e9bdbc40d8b (patch) | |
tree | 1510ebd92680f03084c01abc82a2c64172576515 | |
parent | 304dd618b7aa17158446bedd80af330375d8d4d4 (diff) | |
parent | 966c2fe46a785a2555ec9a1048fc4a9014c40aa3 (diff) | |
download | jquery-521ae562daa8f95def8872a55a260e9bdbc40d8b.tar.gz jquery-521ae562daa8f95def8872a55a260e9bdbc40d8b.zip |
Landing pull request 374. .animate() Callbacks should fire in correct order (unit test included). Fixes #9100.
More Details:
- https://github.com/jquery/jquery/pull/374
- https://github.com/jquery/jquery/issues/9100
-rw-r--r-- | src/effects.js | 7 | ||||
-rw-r--r-- | test/unit/effects.js | 16 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/effects.js b/src/effects.js index 88661e0e9..38d5a0119 100644 --- a/src/effects.js +++ b/src/effects.js @@ -258,7 +258,6 @@ jQuery.fn.extend({ if ( !gotoEnd ) { jQuery._unmark( true, this ); } - // go in reverse order so anything added to the queue during the loop is ignored while ( i-- ) { if ( timers[i].elem === this ) { if (gotoEnd) { @@ -522,11 +521,9 @@ jQuery.fx.prototype = { jQuery.extend( jQuery.fx, { tick: function() { - var timers = jQuery.timers, - i = timers.length; - while ( i-- ) { + for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) { if ( !timers[i]() ) { - timers.splice(i, 1); + timers.splice(i--, 1); } } diff --git a/test/unit/effects.js b/test/unit/effects.js index ea7f4e727..864c4a400 100644 --- a/test/unit/effects.js +++ b/test/unit/effects.js @@ -1029,3 +1029,19 @@ test( "animate properties missing px w/ opacity as last (#9074)", 2, function() start(); }, 100); }); + +test("callbacks should fire in correct order (#9100)", function() { + stop(); + var a = 1, + cb = 0, + $lis = jQuery("<p data-operation='*2'></p><p data-operation='^2'></p>").appendTo("#qunit-fixture") + // The test will always pass if no properties are animated or if the duration is 0 + .animate({fontSize: 12}, 13, function() { + a *= jQuery(this).data("operation") === "*2" ? 2 : a; + cb++; + if ( cb === 2 ) { + equal( a, 4, "test value has been *2 and _then_ ^2"); + start(); + } + }); +}); |