【发布时间】:2011-04-18 17:29:40
【问题描述】:
如果我找到第一个空白文本框,我想返回 false 并从函数返回
function validate(){
$('input[type=text]').each(function(){
if($(this).val() == "")
return false;
});
}
以上代码对我不起作用:( 有人可以帮忙吗?
【问题讨论】:
如果我找到第一个空白文本框,我想返回 false 并从函数返回
function validate(){
$('input[type=text]').each(function(){
if($(this).val() == "")
return false;
});
}
以上代码对我不起作用:( 有人可以帮忙吗?
【问题讨论】:
您正在跳出,但从 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;
}
【讨论】:
each 循环完成之前,该函数返回 true 是否有任何风险?
你可以这样做:
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)
}
【讨论】:
我想在现有答案中添加一些内容,以清除 $(selector).each 的行为以及为什么它不尊重 OP 代码中的 return false。
$(selector).each 中的return 关键字用于中断或继续循环。如果使用return false,它相当于for/while 循环中的break 语句。返回非 false 与 for 循环中的 continue 语句相同;它将立即跳到下一次迭代。 Source
因为您返回 false,所以循环中断并且函数最终返回 undefined 在您的情况下。
您的选择是在 $.each 之外使用 var,或者像 @TJCrowder 所写的那样完全避免使用它。
【讨论】: