如何在每个循环中突破jQuery


674

如何突破jQuery each循环?

我努力了:

 return false;

在循环中,但这没有用。有任何想法吗?


10
为了后代:为什么发问者说返回假不起作用?几乎每个答案都说要这样做。想知道是否可能是因为那只会终止每个循环。相比之下,for循环内的return语句将退出循环调用函数。要从每个循环中获得如此激烈的行为,您需要在每个循环内设置一个带有闭包范围的标志,然后对外部的标志进行响应。
鲍勃·斯坦

7
@ BobStein-VisiBone有人删除了我的原始评论。我把这个放return false错了地方。当我修复它时,一切正常。
Luke101 '17

1
不知道为什么“更新”说return false不起作用$().each-因为它可以。
billynoah

2
@ Luke101,您应该更新问题以明确什么不起作用。当您的问题说接受的答案不起作用时,此Q / A毫无意义。
xr280xr

Answers:


1175

break一个$.each$(selector).each循环,你必须返回false在循环回调。

返回true跳转到下一个迭代,等效continue于普通循环中的a。

$.each(array, function(key, value) { 
    if(value === "foo") {
        return false; // breaks
    }
});

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});

3
正是我要的东西,谢谢。@OZZIE,只需使用“ return true;” 或“返回假”;根据您的条件。
dchayka 2014年

2
@CMS表示“返回false循环回调” 是什么意思?这到底在哪里?
mesqueeb '16

EG$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson

1
不知道jQuery必须从javascript forEach交换参数位置。
Mikee

1
@AlexR突破a的$().each方法完全相同,您的编辑只会引起混乱。
杰克

57

根据文件return false;应做的工作。

我们可以通过使回调函数返回false来破坏$ .each()循环[..]。

在回调中返回false:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

  this; // == valueOfElement (casted to Object)

  return booleanKeepGoing; // optional, unless false 
                           // and want to stop looping
}

顺便说一句,continue像这样工作:

返回非false与for循环中的continue语句相同;它将立即跳至下一个迭代。


35

我为此问题的答案创建了一个提琴,因为接受的答案不正确,这是Google针对该问题返回的第一个StackOverflow线程。

要突破$ .each,您必须使用 return false;

这是一个小提琴证明:

http://jsfiddle.net/9XqRy/


14
我喜欢小提琴,但是我不确定为什么您说接受的答案不正确,因为你们俩都说相同的话。
gitsitgo 2014年

34

我遇到了遇到条件使循环中断的情况,但是.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;
} 

7

“每个”使用回调函数。回调函数的执行与调用函数无关,因此不可能从回调函数返回到调用函数。

如果必须基于某些条件停止循环执行并保留在同一函数中,请使用for循环。


6

我知道这是一个很老的问题,但是我没有看到任何答案,这说明了为什么以及何时有可能因回报而中断。

我想用两个简单的例子来解释一下:

1.示例: 在这种情况下,我们有一个简单的迭代,如果我们可以找到三个,则想用return true中断。

function canFindThree() {
    for(var i = 0; i < 5; i++) {
        if(i === 3) {
           return true;
        }
    }
}

如果调用此函数,它将仅返回true。

2.示例 在这种情况下,我们要迭代jquery的each函数,该函数将匿名函数作为参数。

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;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.