Callbacks: Prevent add() from unlocking with-memory lists

Fixes gh-3469
Closes gh-3470
This commit is contained in:
Richard Gibson 2017-01-09 11:33:39 -08:00 committed by GitHub
parent 14b393d0d6
commit 9d822bc1c1
2 changed files with 22 additions and 1 deletions

View File

@ -69,7 +69,7 @@ jQuery.Callbacks = function( options ) {
fire = function() { fire = function() {
// Enforce single-firing // Enforce single-firing
locked = options.once; locked = locked || options.once;
// Execute callbacks for all pending executions, // Execute callbacks for all pending executions,
// respecting firingIndex overrides and runtime changes // respecting firingIndex overrides and runtime changes

View File

@ -366,3 +366,24 @@ QUnit.test( "jQuery.Callbacks() - disabled callback doesn't fire (gh-1790)", fun
cb.fire(); cb.fire();
assert.ok( !fired, "Disabled callback function didn't 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" );
} );