2010-03-24 171 views
25

我有这样的代码:Javascript:如何调用外部函数从内部函数返回?

function allValid() { 
    $('input').each(function(index) { 
     if(something) { 
      return false; 
     }  
    }); 

    return true; 

} 

return false;影响匿名的内部函数,它总是返回true。有没有简单的方法来调用外部函数的返回?

PS。我不是在寻找解决方法,只想知道原始问题的答案。如果答案是“不可能的”,那很好。

回答

15

是的,存储在一个局部变量。

function allValid() { 
    var allGood = true; 
    $('input').each(function (index) { 
    if (something) { 
     allGood = false; 
    } 
    }); 

    return allGood; 
} 
+4

哪一个效率不高,就好像第一个元素不正确,其余的1000会被检查。 – serg

+3

@ serg555:然后在'.each'里面执行'return(allGood = false)'。这将尽早摆脱循环。 –

+0

@Roatin Marth - 它是每个元素的闭包运行,它不像简单循环那样表现,把它看作是一个函数内部的函数。 –

5

您还可以使用过滤器做到这一点:

var anyInvalid = $('input').filter(function(index) { 
        if(inValidCheck) 
        return true; 
       }).length; 

这工作,因为0被认为是假的,但它实际上给你无效,你可以使用它来显示“你的号码有3个无效的条目“或者如果你想要的东西。

1

如果要有效地做到这一点,我觉得这是最好的方法:

function allValid() { 
    elements = $('input') 
    for (i = 0; i < elements.length; i++) { invalidityCheck(elements[i]) && return false; } 
    return true; 
} 

编辑:虽然更多的JavaScript-Y版本可能会使用的例外:

function allValid() { 
    try 
    $('input').each(function(index)) { 
     if (something) { throw 'something happened!'; } 
    }); 
    catch (e) { 
    if (e == 'something happened!') { 
     return false; 
    } else { 
     throw e; 
    } 
    } 
    return true; 
} 
+0

@Roatin Marth:谢谢从.each()返回的提示。它实际上有记录,我只是错过了。 “http://api.jquery.com/each/” – intuited

+6

我不明白如何使用异常更多JavaScript-y。在任何编程语言中,您都不应该使用逻辑流的异常。 – bcherry

1

您也可以使用迭代的Array.prototype.some,直到找到与条件匹配的元素。

function allValid() { 
    var inputs = $('input'); 
    if(inputs.toArray().some(function(input){ 
     if(something) 
      return true; 
    })) { 
     return false; 
    } else { 
     return true; 
    } 
} 
相关问题