【问题标题】:How to break out of jQuery each loop?如何打破 jQuery 每个循环?
【发布时间】:2010-12-19 13:53:06
【问题描述】:

如何跳出 jQuery each 循环?

我试过了:

 return false;

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


2020 年 9 月 5 日更新

我把return false; 放错了地方。当我把它放在循环中时,一切正常。

【问题讨论】:

  • 为了后代:为什么提问者说返回 false 不起作用?几乎每个答案都说要这样做。想知道是否可能是因为这只会终止每个循环。相比之下,for 循环中的 return 语句将退出循环调用函数。要从每个循环中获得如此激烈的行为,您需要在每个循环内设置一个带有闭包范围的标志,然后响应它外部的标志。
  • @BobStein-VisiBone 有人删除了我原来的评论。我把return false 放错了地方。当我修复它时,一切正常。
  • 不知道为什么“更新”说 return false 不适用于 $().each - 因为它确实如此。
  • @Luke101 您应该更新问题以明确什么不起作用。当您的问题表明接受的答案不起作用时,此 Q/A 毫无意义。
  • @daprezjer 您希望如何更改问题?我会编辑它,但不确定什么是合适的。

标签: jquery loops break


【解决方案1】:

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

【讨论】:

  • 正是我想要的,谢谢。 @OZZIE,只需使用“return true;”或“返回错误;”根据您的条件。
  • “在循环回调中返回false”是什么意思?这到底是哪里?
  • 例如$.each(array, function(key, value) { if(value == "foo") return false; });
  • 不知道 jQuery 必须从 javascript forEach 交换参数位置。
  • @AlexR 打破$().each 的方式完全相同,您的编辑只会造成混乱。
【解决方案2】:

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
}

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

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

【讨论】:

    【解决方案3】:

    我遇到了一种情况,我遇到了一个中断循环的条件,但是 .each() 函数之后的代码仍然执行。然后我将一个标志设置为“真”,并在 .each() 函数之后立即检查该标志,以确保后面的代码没有被执行。

    $('.groupName').each(function() {
        if($(this).text() == groupname){
            alert('This group already exists');
            breakOut = true;
            return false;
        }
    });
    if(breakOut) {
        breakOut = false;
        return false;
    } 
    

    【讨论】:

      【解决方案4】:

      我为这个问题的答案创建了一个 Fiddle,因为接受的答案不正确,而且这是 Google 返回的关于这个问题的第一个 StackOverflow 线程。

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

      这是一个证明它的小提琴:

      http://jsfiddle.net/9XqRy/

      【讨论】:

      • 我喜欢小提琴,但我不知道你为什么说接受的答案不正确,因为你们说的是同一件事。
      【解决方案5】:

      我知道这是一个相当老的问题,但我没有看到任何答案,这阐明了为什么以及何时可以与 return 中断。

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

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

      function canFindThree() {
          for(var i = 0; i < 5; i++) {
              if(i === 3) {
                 return 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】:

        "each" 使用回调函数。 回调函数执行与调用函数无关,因此无法从回调函数返回到调用函数。

        如果您必须根据某些条件停止循环执行并保持在同一个函数中,请使用 for 循环。

        【讨论】:

          【解决方案7】:

          我用这种方式(例如):

          $(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 不为假,则运行命令块

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-06
            • 2011-11-04
            • 1970-01-01
            • 2023-03-10
            • 1970-01-01
            • 2010-09-16
            • 1970-01-01
            相关资源
            最近更新 更多