How to break out of jQuery each Loop
如何跳出jquery
我已经尝试过:
1 | return false; |
在循环中,但这不起作用。有什么想法吗?
对于
返回
1 2 3 4 5 6 7 8 9 10 11 12 13 | $.each(array, function(key, value) { if(value ==="foo") { return false; // breaks } }); // or $(selector).each(function() { if (condition) { return false; } }); |
根据文件,
We can break the $.each() loop [..] by making the callback function
return false.
在回调中返回false:
1 2 3 4 5 6 7 8 | function callback(indexInArray, valueOfElement) { var booleanKeepGoing; this; // == valueOfElement (casted to Object) return booleanKeepGoing; // optional, unless false // and want to stop looping } |
顺便说一句,
Returning non-false is the same as a continue statement in a for loop; it will skip immediately to the next iteration.
我为这个问题的答案创建了一个小提琴,因为接受的答案是错误的,加上这是Google返回的第一个stackoverflow线程。
每一个都必须使用
这里有一把小提琴证明了这一点:
http://jsfiddle.net/9xqry/
我遇到了这样的情况:我遇到了一个打破循环的条件,但是.each()函数后面的代码仍然被执行。然后,我将一个标志设置为"true",并在.each()函数之后立即检查该标志,以确保后面的代码没有被执行。
1 2 3 4 5 6 7 8 9 10 11 | $('.groupName').each(function() { if($(this).text() == groupname){ alert('This group already exists'); breakOut = true; return false; } }); if(breakOut) { breakOut = false; return false; } |
"each"使用回调函数。回调函数执行与调用函数无关,因此无法从回调函数返回调用函数。
如果必须基于某些条件停止循环执行并保持在同一函数中,则使用for loop。
我知道这是一个很古老的问题,但我没有看到任何答案,这就解释了为什么以及何时有可能打破回归。
我想用两个简单的例子来解释它:
1。例子:在这种情况下,我们有一个简单的迭代,如果我们能找到这三个,我们希望用返回真来打破它。
1 2 3 4 5 6 7 | function canFindThree() { for(var i = 0; i < 5; i++) { if(i === 3) { return true; } } } |
如果我们调用这个函数,它只返回true。
2。例子在本例中,我们希望使用jquery的每个函数进行迭代,该函数以匿名函数为参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 | function canFindThree() { var result = false; $.each([1, 2, 3, 4, 5], function(key, value) { if(value === 3) { result = true; return false; //This will only exit the anonymous function and stop the iteration immediatelly. } }); return result; //This will exit the function with return true; } |