如果找到第一个空白文本框,我想返回false并从函数返回
function validate(){
$('input[type=text]').each(function(){
if($(this).val() == "")
return false;
});
}
以上代码对我不起作用:( 有人可以帮忙吗?
答案 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所描述的那样完全使用它。