Вернуть значение при использовании jQuery.each ()? - PullRequest
34 голосов
/ 29 сентября 2010

Я хочу вернуть false и вернуться из функции, если найду первое пустое текстовое поле

function validate(){
 $('input[type=text]').each(function(){
   if($(this).val() == "")
     return false;
});
}

и выше код не работает для меня :( кто-нибудь может помочь?

Ответы [ 3 ]

61 голосов
/ 29 сентября 2010

Вы выпрыгиваете, но из внутреннего цикла я бы вместо этого использовал селектор для вашей конкретной проверки "нет значения", например:

function validate(){
  if($('input[type=text][value=""]').length) return false;
}

Или установитерезультат при входе в цикл и возвращении того, что результат из внешнего цикла:

function validate() {
  var valid = true;
  $('input[type=text]').each(function(){
    if($(this).val() == "") //or a more complex check here
      return valid = false;
  });
  return valid;
}
14 голосов
/ 29 сентября 2010

Вы можете сделать это так:

function validate(){
    var rv = true;
    $('input[type=text]').each(function(){
        if($(this).val() == "") {
            rv = false;   // Set flag
            return false; // Stop iterating
        }
    });
    return rv;
}

Предполагается, что вы хотите вернуть true, если не нашли его.

Вы можете обнаружить, что это одна из тех ситуаций, в которых вы вообще не хотите использовать each:

function validate(){
    var inputs = $('input[type=text]');
    var index;
    while (index = inputs.length - 1; index >= 0; --index) {
        if (inputs[index].value == "") { // Or $(inputs[index]).val() == "" if you prefer
            return false;
        }
    }
    // (Presumably return something here, though you weren't in your example)
}
0 голосов
/ 07 января 2019

Я хочу добавить что-то к существующим ответам, чтобы очистить поведение $(selector).each и почему оно не соответствует возвращаемому ложному в коде OP.

return ключевое слово внутри $(selector).each используется для прерывания или продолжения цикла. Если вы используете return false, это эквивалентно оператору break внутри цикла for/while. Возврат non-false - это то же самое, что и оператор continue в цикле for; он сразу перейдет к следующей итерации. Источник

Поскольку вы возвращаете false, цикл прерывается, и функция в итоге возвращает undefined в вашем случае. Вы можете использовать переменную вне $.each или вообще не использовать ее, как писал @TJCrowder.

...