如何调用外部函数从内部函数返回?

ser*_*erg 29 javascript jquery

我有这样的代码:

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

    return true;
}
Run Code Online (Sandbox Code Playgroud)

总是返回true作为return false;影响匿名内部函数.是否有一种简单的方法来调用外部函数的返回?

PS.我不是在找一个解决方法,只是想知道原始问题的答案.如果答案"不可能",那就没问题了.

bch*_*rry 21

是的,将它存储在局部变量中.

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

  return allGood;
}
Run Code Online (Sandbox Code Playgroud)

  • @Nick Craver:在`.each`里面``return false`打破了循环.这是jQuery寻找的一个特例.http://github.com/jquery/jquery/blob/master/src/core.js#L537 (7认同)
  • 如果内部函数是异步的(如在回调中,当/然后),该怎么办? (7认同)
  • 哪个效率不高,好像第一个元素不正确,无论如何都要检查其余的1000个. (5认同)
  • @ serg555:然后在`.each`里面`return(allGood = false)`.那将提前摆脱循环. (3认同)

Nic*_*ver 5

您也可以使用过滤器执行此操作:

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

这是有效的,因为0被视为false,但实际上它给你无效的数量,你可以使用它来显示"你有3个无效的条目"或者你想要的东西.


Mem*_*sen 5

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

function allValid() {
    var inputs = $('input');
    if(inputs.toArray().some(function(input){
        if(something)
            return true;
    })) {
        return false;
    } else {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)