如何摆脱jQuery each
循环?
我试过了:
return false;
在循环中,但这不起作用。有什么想法吗?
答案 0 :(得分:1016)
要break
$.each
或$(selector).each
循环,您必须在循环回调中返回false
。
返回true
跳转到下一次迭代,相当于正常循环中的continue
。
$.each(array, function(key, value) {
if(value === "foo") {
return false; // breaks
}
});
// or
$(selector).each(function() {
if (condition) {
return false;
}
});
答案 1 :(得分:56)
According to the documentation return false;
should do the job.
我们可以通过制作回调函数来打破$ .each()循环[..] 返回false。
在回调中返回false:
function callback(indexInArray, valueOfElement) {
var booleanKeepGoing;
this; // == valueOfElement (casted to Object)
return booleanKeepGoing; // optional, unless false
// and want to stop looping
}
BTW,continue
的工作方式如下:
返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。
答案 2 :(得分:34)
我为这个问题的答案创建了一个小提琴,因为接受的答案是不正确的,这是Google从这个问题返回的第一个StackOverflow主题。
要突破$ .each,您必须使用return false;
这是一个证明它的小提琴:
答案 3 :(得分:31)
我遇到了遇到破坏循环的情况但是.each()函数之后的代码仍然执行的情况。然后我将标志设置为“true”,并在.each()函数之后立即检查标志,以确保未执行后面的代码。
$('.groupName').each(function() {
if($(this).text() == groupname){
alert('This group already exists');
breakOut = true;
return false;
}
});
if(breakOut) {
breakOut = false;
return false;
}
答案 4 :(得分:8)
“each”使用回调函数。 无论调用函数如何都执行回调函数,因此无法从回调函数返回调用函数。
如果必须根据某些条件停止循环执行并保持相同的函数,则使用for循环。
答案 5 :(得分:2)
我知道这是一个很老的问题,但是我没有看到任何答案,这说明了为什么以及何时有可能随着收益而中断。
我想用两个简单的例子来解释它:
1。示例: 在这种情况下,我们有一个简单的迭代,如果可以找到这三个,我们想用return true来打破。
function canFindThree() {
for(var i = 0; i < 5; i++) {
if(i === 3) {
return true;
}
}
}
如果我们调用此函数,它将仅返回true。
2。例子 在这种情况下,我们要迭代使用匿名函数作为参数的jquery的each function。
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;
}
答案 6 :(得分:0)
我使用这种方式(例如):
$(document).on('click', '#save', function () {
var cont = true;
$('.field').each(function () {
if ($(this).val() === '') {
alert('Please fill out all fields');
cont = false;
return false;
}
});
if (cont === false) {
return false;
}
/* commands block */
});
如果cont不为假,则运行命令块