14

クライアント側の検証を行っている単純なフォームがあります。検証するには、どのフィールドも空白のままにしないでください。これは私がそれに行く方法です:

function validateForm() {
  $('.form-field').each(function() {
    if ( $(this).val() === '' ) {
      return false
    }
    else {
      return true;
    }
  });
}

何らかの理由で、すべてのフィールドが入力されているにもかかわらず、私の関数は常に false を返します。

4

4 に答える 4

38

無名関数内から false を返すことはできません。さらに、それが機能した場合、最初のフィールドが空の場合は false を返し、そうでない場合は true を返し、残りのフィールドを完全に無視します。もっとエレガントな解決策があるかもしれませんが、次のようなことができます:

function validateForm() {
  var isValid = true;
  $('.form-field').each(function() {
    if ( $(this).val() === '' )
        isValid = false;
  });
  return isValid;
}

別の推奨事項: これには、すべてのフォーム フィールドをそのフォームフィールド クラスで装飾する必要があります。別のセレクターを使用してフィルタリングすることに興味があるかもしれません。$('form.validated-form input[type="text"]')

編集ああ、私はパンチに打ち負かされましたが、私の説明はまだ有効であり、うまくいけば役に立ちます.

于 2013-09-20T00:45:34.657 に答える
6

validateメソッドからではなく、内部関数から戻っていました

試す

function validateForm() {
    var valid = true;
    $('.form-field').each(function () {
        if ($(this).val() === '') {
            valid = false;
            return false;
        }
    });
    return valid
}
于 2013-09-20T00:43:26.493 に答える
1
function validateForm() {
    var invalid= 0;
    $('.form-field').each(function () {
        if ($(this).val() == '') {
            invalid++;
        }
    });

   if(invalid>0)
       return false;
   else
       return true;
}
于 2013-09-20T00:53:56.463 に答える
-1

同様のアプローチを次に示します。

function validateForm() {
  var valid = true;
  $('.form-field').each(function() {
    valid &= !!$(this).val();
  });
  return valid;
}

!!入力値をブール値に変換するだけです

于 2017-08-28T22:05:17.643 に答える