如何突破每个循环的jQuery

How to break out of jQuery each Loop

如何跳出jquery each循环?

我已经尝试过:

1
 return false;

在循环中,但这不起作用。有什么想法吗?

  • 对于子孙后代:为什么提问者说返回错误无效?事实上,每个答案都说要这样做。想知道是否可能是因为这只终止了每个循环。相反,for循环中的返回语句将退出循环和调用函数。要从每个循环中获得如此剧烈的行为,您需要在每个循环中设置一个带有闭包范围的标志,然后对其外部的标志作出响应。
  • @有人删除了我的原始评论。我把return false放错地方了。当我修好的时候,一切都正常了。
  • 不知道为什么"更新"说return false不适用于$().each,因为它适用。


对于break一个$.each$(selector).each循环,您必须在循环回调中返回false

返回true跳过下一个迭代,相当于正常循环中的continue

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;
  }
});

  • 正是我要找的,谢谢。@Ozzie,只需根据你的情况使用"返回真的";或"返回假的"。
  • @cms"在循环回调中返回false"是什么意思?这到底在哪里?
  • $.each(array, function(key, value) { if(value =="foo") return false; });
  • 不知道jquery必须从javascript foreach交换参数位置。
  • @亚历克谢从一个$().each的突破是以完全相同的方式完成的,你的编辑只会造成混乱。
  • @杰克,同意,会把答案编辑成笔记,你可以用同样的方式来处理这两个问题。


根据文件,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
}

顺便说一句,continue的工作原理如下:

Returning non-false is the same as a continue statement in a for loop; it will skip immediately to the next iteration.


我为这个问题的答案创建了一个小提琴,因为接受的答案是错误的,加上这是Google返回的第一个stackoverflow线程。

每一个都必须使用return false;

这里有一把小提琴证明了这一点:

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;
}

  • 为我工作。+1


"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;
}