2017-11-13 4 views
0

jQueryの妥当性検査を使用するフォームがあり、控えめな検証を使用してルールを宣言しています。現在、私は、デフォルトのフォームが、その後のブレだけでぼやけたフィールドを検証された後、(フォーム内のすべてのフィールドを検証する)に提出されるまで、ぼかしには何の検証がないところ振る舞いを提出するを使用しています。ぼやけたフィールドの代わりにフィールドのぼかしでフォーム全体を検証する方法

この動作を変更して、送信後に1つのフィールドをぼかすとフォーム全体が再検証されるため、すべての問題が解決されるまでエラーサマリが画面に残ります。提出前の動作は変わりません。

私は運で、他のSOの回答に基づいて、次のonfocusout方法を試してみた:

onfocusout: function(element, event) { 
    $(element).valid(); 
} 

onfocusout: function(element, event) { 
    this.element(element); 
} 
+0

@Azim、絶対にしない内のすべてのテキスト入力を選択します。それは無限再帰を引き起こす可能性があるとして、 '.valid()'メソッドは '.validate()'メソッドのどこ内部に属していません。 .validate 'の内側()' ...しかし、この場合には、あなたがこの方法を使用してフォーム全体の検証をトリガーすることができないように思われる場合、通常、 '.elementは()'このための適切な方法です。参照:https://jqueryvalidation.org/Validator.element/、このような詳細な説明のために – Sparky

答えて

1

this.element(element)$(element).valid()の両方が単一の要素の検証をトリガーするためのものです。あなたのケースでは、.validate()または.setDefaults()メソッドのオプションの内側にこれを適用しようとしているので、.valid()を使用すると、無限再帰を引き起こす可能性があります。

これは.element()となります。ただし、as per the docsは、フォーム全体ではなく、単一のフィールドでのみ使用できます。単一のフィールドをぼかすことはフォーム全体に

を再検証方法の代わりに、私はこの動作を変更したいだけのぼやけたフィールド
のフィールドブラーにフォーム全体を検証するために...

解決策は、すべての関連する入力要素に添付された外部blurイベントハンドラを書き、フォームに.valid()メソッドをアタッチすることです。この一般的な例のセレクタを、特定のフォームに適用できるものに変更します。

$('#myform input[type="text"]').on('blur', function() { 
    $('#myform').valid(); // <- trigger validation on entire form 
}); 
  • $('#myform input[type="text"]')#myform

  • $('#myform') selects the形態based on ID = "あるmyForm" `

+0

感謝を!私は200種類以上のフォームを持っているので、 'this.submitted'が空の場合に' $(element.form).valid() 'を単に実行するために、バリデータのデフォルトの' onfocusout'をオーバーライドしています。フォームが最初に提出されていない限り、入居してください。私はデフォルトの 'onkeyup'に同じ動作を追加して、検証メッセージを出しました。 – Mourndark

+0

あなたの答えにちょうど修正/追加。フォームを検証するには 'validator = $(" selector ")。validate()'を指定して 'validator.form()'を使うこともできます。 – Arkni

+0

@Arkni、真のが、 'バリhttps://jqueryvalidation.org/Validator.form/を参照してください。form() 'メソッドは、' .validate() 'メソッド内で使用されると、無限再帰も引き起こす可能性があります。 – Sparky

関連する問題