2012-06-11 53 views
2

我正在使用函数来检查是否填写了必填字段。我有这两个功能,应该这样做,但第一个功能没有。在它遇到回报后,JavaScript是否应该停止执行代码?虽然这一个返回false错误返回后执行代码的JavaScript

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

我以为第一回路将停止执行代码

该函数返回真的吗?我想知道它是否与范围有关?

+1

它不停止执行代码.. 。但是只有在你执行了'return'的函数中,这是传递给'.each()'的函数。 – 2012-06-11 14:02:42

+0

呼叫者各自不返回函数的返回值:) –

回答

5

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

第二代码片段是正确的,但你可以优化它,更换r = false;return r = false;(它将停止jQuery的迭代时,你已经知道,场中的一个未填写)

+0

谢谢你的优化技巧! – LongInt

2

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

+0

当然!谢谢,我在这里盲目地盯着。 – LongInt

1

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

编辑: 返回false仅在您传递给.each的匿名函数中有效。

+1

混淆OP的行为是由'each'中的匿名函数引起的,而不是'case'语句引起的。 – apsillers

3

在第一个片段中,return适用于参数为each的参数。 return不适用于trnReady函数。因此,return false用于each中的匿名功能。

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

1

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

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

但只有迭代停止

的代码打break,但在这种情况下要执行的没有其他return声明。

相关问题