【问题标题】:Return a value when using jQuery.each()?使用 jQuery.each() 时返回一个值?
【发布时间】:2011-04-18 17:29:40
【问题描述】:

如果我找到第一个空白文本框,我想返回 false 并从函数返回

function validate(){
 $('input[type=text]').each(function(){
   if($(this).val() == "")
     return false;
});
}

以上代码对我不起作用:( 有人可以帮忙吗?

【问题讨论】:

    标签: jquery each


    【解决方案1】:

    您正在跳出,但从 inner 循环中,我会改为使用选择器进行特定的“无价值”检查,如下所示:

    function validate(){
      if($('input[type=text][value=""]').length) return false;
    }
    

    或者,在循环内部设置结果,然后从外部循环返回 结果:

    function validate() {
      var valid = true;
      $('input[type=text]').each(function(){
        if($(this).val() == "") //or a more complex check here
          return valid = false;
      });
      return valid;
    }
    

    【讨论】:

    • @Nick Craver,这是一个非常古老的帖子,但我有一个问题。在 each 循环完成之前,该函数返回 true 是否有任何风险?
    • 这种风险绝对为零,因为在 .each() 完成之前,它不会继续执行最后一条语句。 @YahyaE
    • 第一个例子在你需要先修整值时不起作用。第二个例子有效,但它依赖于一个状态变量,这通常很好,但如果你想做纯函数式编程,它不会被认为是有效的。
    【解决方案2】:

    你可以这样做:

    function validate(){
        var rv = true;
        $('input[type=text]').each(function(){
            if($(this).val() == "") {
                rv = false;   // Set flag
                return false; // Stop iterating
            }
        });
        return rv;
    }
    

    假设您想在找不到 true 时返回它。

    您可能会发现这是您根本不想使用each 的情况之一:

    function validate(){
        var inputs = $('input[type=text]');
        var index;
        while (index = inputs.length - 1; index >= 0; --index) {
            if (inputs[index].value == "") { // Or $(inputs[index]).val() == "" if you prefer
                return false;
            }
        }
        // (Presumably return something here, though you weren't in your example)
    }
    

    【讨论】:

      【解决方案3】:

      我想在现有答案中添加一些内容,以清除 $(selector).each 的行为以及为什么它不尊重 OP 代码中的 return false。

      $(selector).each 中的return 关键字用于中断或继续循环。如果使用return false,它相当于for/while 循环中的break 语句。返回非 false 与 for 循环中的 continue 语句相同;它将立即跳到下一次迭代。 Source

      因为您返回 false,所以循环中断并且函数最终返回 undefined 在您的情况下。 您的选择是在 $.each 之外使用 var,或者像 @TJCrowder 所写的那样完全避免使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 2014-01-19
        • 1970-01-01
        • 2018-12-19
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多