2

我正在使用一个函数来检查是否填写了必填字段。我有这两个功能,应该做同样的事情,但是第一个没有。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;
}

虽然这个返回错误:

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

我以为第一次返回会停止执行代码?我想知道它是否与范围有关?

4

5 回答 5

5

在第一个代码片段return false;中,仅停止执行传递给 jquery每个方法的内部函数。它还根据 jquery API 停止 jquery 迭代。但在任何情况下 trnReady 都会返回 true。

第二个代码片段是正确的,但您可以对其进行优化,替换r = false;return r = false;(当您已经知道其中一个字段未填充时,它将停止 jquery 迭代)

于 2012-06-11T14:12:13.823 回答
3

在第一个片段中,return应用于作为 的参数的函数eachreturn不适用于该功能trnReady。因此,return false是用于each.

在第二个片段中,return是正确returntrnReady函数,所以它工作正常。

于 2012-06-11T14:06:24.820 回答
2

这些函数中的每一个都包含嵌套在其中的第二个函数,并且您期望在嵌套函数中生效的返回值 - 但它们没有。您不能从内部函数返回到外部函数的调用者。您可以做的最好的事情是在内部函数中设置一个变量,然后从外部函数返回该变量的值,就像您的第二个示例一样。

于 2012-06-11T14:04:21.863 回答
1

在第一个示例中,您的函数返回false但仅在当前 case 语句的范围内。你false有任何效果,任何动作在发生时都不会被调用。

编辑: return false 仅在您传递给的匿名函数内有效.each

于 2012-06-11T14:05:24.997 回答
1

jQuery each是一个迭代器,它将每个对象传递给您定义的函数。

当定义的函数返回 true 时,迭代继续(到下一个对象) l 当函数返回 false 时,迭代停止。

但只有迭代停止

代码命中break,但return在这种情况下没有要执行的其他语句。

于 2012-06-11T14:08:25.557 回答