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

时间:2010-03-24 16:49:50

标签: javascript jquery

我有这样的代码:

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

    return true;
}

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

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

4 个答案:

答案 0 :(得分:20)

是的,将其存储在本地变量中。

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

  return allGood;
}

答案 1 :(得分:5)

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

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

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

答案 2 :(得分: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;
}

答案 3 :(得分:1)

您还可以使用迭代的Array.prototype.some,直到找到符合条件的元素。

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