Skip to content

Commit c39bd07

Browse files
committed
Added support for breaking in an object loop (Bug jquery#2111).
1 parent ff08982 commit c39bd07

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/core.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -707,20 +707,22 @@ jQuery.extend({
707707
// args is for internal usage only
708708
each: function( object, callback, args ) {
709709
if ( args ) {
710-
if ( object.length == undefined )
710+
if ( object.length == undefined ) {
711711
for ( var name in object )
712-
callback.apply( object[ name ], args );
713-
else
712+
if ( callback.apply( object[ name ], args ) === false )
713+
break;
714+
} else
714715
for ( var i = 0, length = object.length; i < length; i++ )
715716
if ( callback.apply( object[ i ], args ) === false )
716717
break;
717718

718719
// A special, fast, case for the most common use of each
719720
} else {
720-
if ( object.length == undefined )
721+
if ( object.length == undefined ) {
721722
for ( var name in object )
722-
callback.call( object[ name ], name, object[ name ] );
723-
else
723+
if ( callback.call( object[ name ], name, object[ name ] ) === false )
724+
break;
725+
} else
724726
for ( var i = 0, length = object.length, value = object[0];
725727
i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
726728
}

test/unit/core.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1314,7 +1314,7 @@ test("text(String)", function() {
13141314
});
13151315

13161316
test("$.each(Object,Function)", function() {
1317-
expect(8);
1317+
expect(12);
13181318
$.each( [0,1,2], function(i, n){
13191319
ok( i == n, "Check array iteration" );
13201320
});
@@ -1326,6 +1326,19 @@ test("$.each(Object,Function)", function() {
13261326
$.each( { name: "name", lang: "lang" }, function(i, n){
13271327
ok( i == n, "Check object iteration" );
13281328
});
1329+
1330+
var total = 0;
1331+
jQuery.each([1,2,3], function(i,v){ total += v; });
1332+
ok( total == 6, "Looping over an array" );
1333+
total = 0;
1334+
jQuery.each([1,2,3], function(i,v){ total += v; if ( i == 1 ) return false; });
1335+
ok( total == 3, "Looping over an array, with break" );
1336+
total = 0;
1337+
jQuery.each({"a":1,"b":2,"c":3}, function(i,v){ total += v; });
1338+
ok( total == 6, "Looping over an object" );
1339+
total = 0;
1340+
jQuery.each({"a":3,"b":3,"c":3}, function(i,v){ total += v; return false; });
1341+
ok( total == 3, "Looping over an object, with break" );
13291342
});
13301343

13311344
test("$.prop", function() {

0 commit comments

Comments
 (0)