Ответ 1
Да, сохраните его в локальной переменной.
function allValid() {
var allGood = true;
$('input').each(function (index) {
if (something) {
allGood = false;
}
});
return allGood;
}
У меня такой код:
function allValid() {
$('input').each(function(index) {
if(something) {
return false;
}
});
return true;
}
который всегда возвращает true, поскольку return false;
влияет на анонимную внутреннюю функцию. Есть ли простой способ вызова внешней функции?
PS. Я не ищу обходного пути, просто хочу знать ответ на оригинальный вопрос. Если ответ "невозможно", это нормально.
Да, сохраните его в локальной переменной.
function allValid() {
var allGood = true;
$('input').each(function (index) {
if (something) {
allGood = false;
}
});
return allGood;
}
Вы также можете сделать это с помощью фильтра:
var anyInvalid = $('input').filter(function(index) {
if(inValidCheck)
return true;
}).length;
Это работает, потому что 0 считается ложным, но на самом деле дает вам количество недопустимых значений, которые вы могли бы использовать для отображения "У вас есть 3 недопустимых ввода" или что-то, если вы захотите.
Если вы хотите сделать это эффективно, я думаю, что это лучший способ:
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;
}
Вы также можете использовать Array.prototype.some, который выполняет итерацию, пока не найдет элемент, соответствующий критериям.
function allValid() {
var inputs = $('input');
if(inputs.toArray().some(function(input){
if(something)
return true;
})) {
return false;
} else {
return true;
}
}