我有这样的代码:
function allValid() {
$('input').each(function(index) {
if(something) {
return false;
}
});
return true;
}
总是返回true,因为return false;
会影响匿名内部函数。是否有一种简单的方法来调用外部函数的返回?
PS。我不是在寻找解决方法,只是想知道原始问题的答案。如果答案“不可能”,那就没关系了。
答案 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;
}
}