aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Gibson <richard.gibson@gmail.com>2017-01-09 11:33:39 -0800
committerGitHub <noreply@github.com>2017-01-09 11:33:39 -0800
commit9d822bc1c13dd3393b418210a99537c22c06f2c3 (patch)
treee0ab229ea58b26d94306d23afe420ebfe0e87113
parent14b393d0d64e119db7754b1075317a673810929c (diff)
downloadjquery-9d822bc1c13dd3393b418210a99537c22c06f2c3.tar.gz
jquery-9d822bc1c13dd3393b418210a99537c22c06f2c3.zip
Callbacks: Prevent add() from unlocking with-memory lists
Fixes gh-3469 Closes gh-3470
-rw-r--r--src/callbacks.js2
-rw-r--r--test/unit/callbacks.js21
2 files changed, 22 insertions, 1 deletions
diff --git a/src/callbacks.js b/src/callbacks.js
index a6d4df03f..8831e531a 100644
--- a/src/callbacks.js
+++ b/src/callbacks.js
@@ -69,7 +69,7 @@ jQuery.Callbacks = function( options ) {
fire = function() {
// Enforce single-firing
- locked = options.once;
+ locked = locked || options.once;
// Execute callbacks for all pending executions,
// respecting firingIndex overrides and runtime changes
diff --git a/test/unit/callbacks.js b/test/unit/callbacks.js
index c6c379ded..04d44443d 100644
--- a/test/unit/callbacks.js
+++ b/test/unit/callbacks.js
@@ -366,3 +366,24 @@ QUnit.test( "jQuery.Callbacks() - disabled callback doesn't fire (gh-1790)", fun
cb.fire();
assert.ok( !fired, "Disabled callback function didn't fire" );
} );
+
+QUnit.test( "jQuery.Callbacks() - list with memory stays locked (gh-3469)", function( assert ) {
+
+ assert.expect( 3 );
+
+ var cb = jQuery.Callbacks( "memory" ),
+ fired = 0,
+ count1 = function() { fired += 1; },
+ count2 = function() { fired += 10; };
+
+ cb.add( count1 );
+ cb.fire();
+ assert.equal( fired, 1, "Pre-lock() fire" );
+
+ cb.lock();
+ cb.add( count2 );
+ assert.equal( fired, 11, "Post-lock() add" );
+
+ cb.fire();
+ assert.equal( fired, 11, "Post-lock() fire ignored" );
+} );