]> source.dussan.org Git - jquery.git/commitdiff
Callbacks: Don't abort execution on .lock()
authorRichard Gibson <richard.gibson@gmail.com>
Sun, 4 Jan 2015 00:55:31 +0000 (19:55 -0500)
committerRichard Gibson <richard.gibson@gmail.com>
Sun, 11 Jan 2015 02:25:00 +0000 (21:25 -0500)
Fixes gh-1990
Closes gh-1991

src/callbacks.js
test/unit/callbacks.js

index 2c96f0c4a9e2121a5ffed1f9b1a6af67e134827e..4ce1bcdc571b296476dd9e9143413ba4dcaa830e 100644 (file)
@@ -190,7 +190,7 @@ jQuery.Callbacks = function( options ) {
                        lock: function() {
                                stack = undefined;
                                locked = true;
-                               if ( !memory ) {
+                               if ( !memory && !firing ) {
                                        self.disable();
                                }
                                return this;
index 1984e578d863c97c3a0f1b6c27b1d79ed57bd33f..b8dc8ab53afb2a1909908588d80c7358ff475633 100644 (file)
@@ -65,7 +65,7 @@ jQuery.each( tests, function( strFlags, resultString ) {
 
                                test( "jQuery.Callbacks( " + showFlags( flags ) + " ) - " + filterLabel, function() {
 
-                                       expect( 28 );
+                                       expect( 29 );
 
                                        var cblist,
                                                results = resultString.split( /\s+/ );
@@ -94,7 +94,7 @@ jQuery.each( tests, function( strFlags, resultString ) {
                                        strictEqual( cblist.disabled(), true, ".disabled() becomes true" );
                                        strictEqual( cblist.locked(), true, "disabling locks" );
 
-                                       // #13517 - Emptying while firing
+                                       // Emptying while firing (#13517)
                                        cblist = jQuery.Callbacks( flags );
                                        cblist.add( cblist.empty );
                                        cblist.add( function() {
@@ -164,6 +164,16 @@ jQuery.each( tests, function( strFlags, resultString ) {
                                        strictEqual( output, "X", "Lock early" );
                                        strictEqual( cblist.locked(), true, "Locking reflected in accessor" );
 
+                                       // Locking while firing (gh-1990)
+                                       output = "X";
+                                       cblist = jQuery.Callbacks( flags );
+                                       cblist.add( cblist.lock );
+                                       cblist.add(function( str ) {
+                                               output += str;
+                                       });
+                                       cblist.fire( "A" );
+                                       strictEqual( output, "XA", "Locking doesn't abort execution (gh-1990)" );
+
                                        // Ordering
                                        output = "X";
                                        cblist = jQuery.Callbacks( flags );
@@ -331,8 +341,6 @@ test( "jQuery.Callbacks.has", function() {
        strictEqual( cb.has(), true, "Check if unique list has callback function(s) attached" );
        cb.lock();
        strictEqual( cb.has(), false, "locked() list is empty and returns false" );
-
-
 });
 
 test( "jQuery.Callbacks() - adding a string doesn't cause a stack overflow", function() {