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

时间:2010-09-29 09:22:19

标签: jquery each

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

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

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

3 个答案:

答案 0 :(得分:61)

你正在跳出来,但是从内部循环中,我会使用一个选择器来进行特定的“无价值”检查,如下所示:

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

答案 1 :(得分:14)

你可以这样做:

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

答案 2 :(得分:0)

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

return中的

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

由于您返回的是false,因此循环中断并且该函数最终返回undefined。 您可以选择在$.each外部使用var,或者避免像@TJCrowder所描述的那样完全使用它。