不能在循环外打破(即使它在循环中!)

时间:2011-03-28 16:57:52

标签: jquery each break

如果某个条件成立,我试图突破循环。我的代码工作正常,直到我尝试添加中断。在运行时,VS2010和IE8中的intellisense错误告诉我,我不能在循环之外突破,但我不认为我。

我完全糊涂了,所以希望有人可以指出一些我可以忽略的东西!

var value1 = "hello"; 

$.each(myJsonObject.SomeCollection, function () {

    if (value1 == this.value2) {
        alert("Found it!");
        exitFlag = true;
    }

    if (exitFlag) break;
});

3 个答案:

答案 0 :(得分:1)

只需return false;即可退出.each循环。 From the documentation

  

我们可以打破$.each()循环   通过制作特定的迭代   回调函数返回false。   返回非假与a相同   for循环中的continue语句;它   将立即跳到下一个   迭代。

使用jQuery .each迭代器与使用常规循环不同,因此此处不能使用break。这就像这样做,这是不可能的:

for (var i = 0; i < 10; ++i) {
  myFunc(i);
}

function myFunc(i) {
  if (i > 5) {
    break; // ILLEGAL
  }
}

答案 1 :(得分:1)

jQuery可能没有为.each()函数使用循环。也许返回false可能有用(在Python中它可以):

var value1 = "hello"; 

$.each(myJsonObject.SomeCollection, function () {

    if (value1 == this.value2) {
        alert("Found it!");
        exitFlag = true;
    }

    if (exitFlag) return false;
});

答案 2 :(得分:0)

如果您的集合可以像数组一样被处理,导航和索引,只需使用常规循环并从中断。或者如果您如此倾向于使用$.each迭代器来完成这么简单的事情,那么只需让您的函数返回false(这将有效地使$.each迭代器停止)。

为了重新执行我刚才所说的内容,如果该集合可以被视为一个数组,那么只需使用一个普通的循环。除非你有充分的理由不这样做,否则总是使用最简单,最干净的工具来完成工作。