mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Do not iterate over functions. Fixes #12665. Unit tests added. Thanks to @kselden for finding the bug.
This commit is contained in:
parent
cfe95a8643
commit
bb38f70646
@ -93,8 +93,10 @@ jQuery.Callbacks = function( options ) {
|
||||
(function add( args ) {
|
||||
jQuery.each( args, function( _, arg ) {
|
||||
var type = jQuery.type( arg );
|
||||
if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) {
|
||||
list.push( arg );
|
||||
if ( type === "function" ) {
|
||||
if ( !options.unique || !self.has( arg ) ) {
|
||||
list.push( arg );
|
||||
}
|
||||
} else if ( arg && arg.length && type !== "string" ) {
|
||||
// Inspect recursively
|
||||
add( arg );
|
||||
|
@ -12,17 +12,17 @@ var output,
|
||||
outputB = addToOutput( "B" ),
|
||||
outputC = addToOutput( "C" ),
|
||||
tests = {
|
||||
"": "XABC X XABCABCC X XBB X XABA X",
|
||||
"once": "XABC X X X X X XABA X",
|
||||
"memory": "XABC XABC XABCABCCC XA XBB XB XABA XC",
|
||||
"unique": "XABC X XABCA X XBB X XAB X",
|
||||
"stopOnFalse": "XABC X XABCABCC X XBB X XA X",
|
||||
"once memory": "XABC XABC X XA X XA XABA XC",
|
||||
"once unique": "XABC X X X X X XAB X",
|
||||
"once stopOnFalse": "XABC X X X X X XA X",
|
||||
"memory unique": "XABC XA XABCA XA XBB XB XAB XC",
|
||||
"memory stopOnFalse": "XABC XABC XABCABCCC XA XBB XB XA X",
|
||||
"unique stopOnFalse": "XABC X XABCA X XBB X XA X"
|
||||
"": "XABC X XABCABCC X XBB X XABA X XX",
|
||||
"once": "XABC X X X X X XABA X XX",
|
||||
"memory": "XABC XABC XABCABCCC XA XBB XB XABA XC XX",
|
||||
"unique": "XABC X XABCA X XBB X XAB X X",
|
||||
"stopOnFalse": "XABC X XABCABCC X XBB X XA X XX",
|
||||
"once memory": "XABC XABC X XA X XA XABA XC XX",
|
||||
"once unique": "XABC X X X X X XAB X X",
|
||||
"once stopOnFalse": "XABC X X X X X XA X XX",
|
||||
"memory unique": "XABC XA XABCA XA XBB XB XAB XC X",
|
||||
"memory stopOnFalse": "XABC XABC XABCABCCC XA XBB XB XA X XX",
|
||||
"unique stopOnFalse": "XABC X XABCA X XBB X XA X X"
|
||||
},
|
||||
filters = {
|
||||
"no filter": undefined,
|
||||
@ -32,7 +32,7 @@ var output,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function showFlags( flags ) {
|
||||
if ( typeof flags === "string" ) {
|
||||
return '"' + flags + '"';
|
||||
@ -60,7 +60,7 @@ jQuery.each( tests, function( strFlags, resultString ) {
|
||||
|
||||
test( "jQuery.Callbacks( " + showFlags( flags ) + " ) - " + filterLabel, function() {
|
||||
|
||||
expect( 20 );
|
||||
expect( 21 );
|
||||
|
||||
// Give qunit a little breathing room
|
||||
stop();
|
||||
@ -197,6 +197,19 @@ jQuery.each( tests, function( strFlags, resultString ) {
|
||||
cblist.add( outputC );
|
||||
strictEqual( output, results.shift(), "Adding a callback after one returned false" );
|
||||
|
||||
// Callbacks are not iterated
|
||||
output = "";
|
||||
function handler( tmp ) {
|
||||
output += "X";
|
||||
}
|
||||
handler.method = function() {
|
||||
output += "!";
|
||||
};
|
||||
cblist = jQuery.Callbacks( flags );
|
||||
cblist.add( handler );
|
||||
cblist.add( handler );
|
||||
cblist.fire();
|
||||
strictEqual( output, results.shift(), "No callback iteration" );
|
||||
});
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user