我正在使用一个函数来检查是否填写了必填字段。我有这两个功能,应该做同样的事情,但第一个没有。在遇到退货后,javascript不应该停止执行代码吗?
此函数返回true:
//Checks if various stages are ready
function trnReady(area) {
switch (area)
{
case 'settings':
$('input.required').each(function(){
if($(this).val() == '')
{
return false;
}
});
break;
}
return true;
}
虽然这个返回false:
//Checks if various stages are ready
function trnReady(area) {
var r = true;
switch (area)
{
case 'settings':
$('input.required').each(function(){
if($(this).val() == '')
{
r = false;
}
});
break;
}
return r;
}
我认为第一次返回会停止执行代码吗?我想知道它是否与范围有关?
答案 0 :(得分:5)
在第一个代码片段中,return false;
仅停止执行传递给jquery 每个方法的内部函数。它还相应于jquery API停止jquery迭代。但无论如何,trnReady都会返回true。
第二个代码段是正确的,但您可以优化它,将r = false;
替换为return r = false;
(当您已经知道其中一个字段未填充时,它将停止jquery迭代)
答案 1 :(得分:3)
在第一个代码段中,return
适用于作为each
参数的函数。 return
不适用于trnReady
功能。因此,return false
适用于each
中的匿名函数。
在第二个代码段中,return
正好是return
函数的trnReady
,因此效果正常。
答案 2 :(得分:2)
这些函数中的每一个都包含嵌套在其中的第二个函数,它是嵌套函数内部的返回,您希望它们生效 - 但它们不会生效。您无法从内部函数返回外部函数的调用者。您可以做的最好的事情是在内部函数中设置一个变量,然后从外部函数返回该变量的值,如第二个示例所示。
答案 3 :(得分:1)
在第一个示例中,函数返回false
但仅在当前case语句的范围内。您的false
有效,任何操作都不会在发生时调用。
编辑:
返回false仅在您传递给.each
的匿名函数内有效。
答案 4 :(得分:1)
jQuery each是一个迭代器,它将每个对象传递给您定义的函数。
当定义的函数返回true时,迭代继续(到下一个对象)l 当函数返回false时,迭代停止。
但只停止了迭代
代码命中break
,但在这种情况下没有其他return
语句要执行。