使用 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() 时返回一个值?的主要内容,如果未能解决你的问题,请参考以下文章