使用 jQuery.each() 时返回一个值?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 所写的那样完全避免使用它。

【讨论】:

以上是关于使用 jQuery.each() 时返回一个值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery each() 函数返回一个值

返回假;在 jquery .each 函数中不起作用

jquery each 和 map 区别

jQuery中的工具

使用 Jquery each() 循环输入字段以进行验证

jQuery .each() 只显示最后一个或第一个值