2016-04-19 15 views
0

私は、必要なフィールドが別のフォームフィールドの値に依存するフォームを持っています。したがって、必要なルールは、他のフィールドに依存して真または偽になる可能性があります。問題は、必須ルールだけが当てはまる場合は、受け入れルールがそこにあるべきであるということです。どうやってやるの?JQueryの検証ルールは別のルールに依存します

..., 
fieldA: { 
    maxlength: 3, 
    accept: "[0-9]{3}", 
    required: function() { 
      if($('#fieldB').val() == 'ABCD') { 
       return false; 
      } else { 
       return true; 
      } 
    } 
},... 

ありがとうございます。

+0

あなたが書いたコードの何が問題なのですか? https://jqueryvalidation.org/required-methodで 'dependency-callback'機能を実装しているようです。 – Barmar

+0

年齢が<13の場合に親を必要とする例と似ています。 – Barmar

+0

@Barmar私の現在のコードの問題は、受け入れルールは、必要な場合に適用されます。私は受け入れルールが必要なときにのみ動作するようにしたい –

答えて

1

「受け入れる」ルールがカスタムルールであることはわかりませんでした。私はオプションフィールドがあるかどうかをチェックするコードを編集しました。助けてくれてありがとう@Barmar (要素)this.optional

jQuery.validator.addMethod("accept", function(value, element, param) { 
    return this.optional(element) || value.match(new RegExp("^" + param + "$")); 
}); 

+0

これは適切な解決策です。カスタムルールを記述するための一般的なパターンには、常に 'this.optional'チェックが含まれていなければなりません。 http://stackoverflow.com/questions/3526236/jquery-validator-plug-in-validate-optional-fieldとすべての例を参照してください。https://jqueryvalidation.org/jQuery.validator.addMethod/ – Barmar

0

残念ながら、required関数は、フォームがレンダリングされたときにのみ呼び出され、独立フィールドが変更されると依存フィールドを更新しません。反応やノックアウトのようなダイナミックなUIライブラリを使うこともできますし、.change()ハンドラを他のものの属性を操作する独立したフィールドに単にバインドすることもできます。

設定が正しくない場合は、送信を防止するために何かを.submit()にバインドすることもできます。

+0

依存関係コールバックは、フォームのレンダリング時ではなく、検証時に実行されるはずです。 – Barmar

関連する問題