3

クライアント側の検証にjQueryValidateプラグインを使用していて、AJAXを介して送信するフォームがあります。フォームを送信した後、フォームをリセットしてください。私は.resetForm()フィールドをリセットする方法を使用しましたが、これは機能しますが、問題は、検証プラグインがフォーカスされたときにフィールドをすぐに検証しようとし、新しい送信に入力を入力する機会を与える前にエラーを出すことです。

フローの例:

  • 最初に検証をトリガーします
  • 検証を修正し、AJAX経由でフォームを送信します
  • .resetForm()を呼び出すと、フィールドが正常にクリアされます
  • もう一度フォームに記入してみてください
  • フィールドに焦点を当てます(私の場合は電子メール検証があります)
  • 入力を入力する機会を与える前に、それは検証され、それが正しくないと言います。

通常、プラグインは、入力が正しくないことを通知する前に、入力を入力できるようにします。フォーカス検証を一度にオフにせずに、フォームを本当にリセットして、フォーカスで検証が再度行われないようにする方法はありますか?

ありがとう、そしてここにクリーンアップ/簡略化されたコードサンプルがあります!

    // Validation
    $('#registerForm').validate({
        submitHandler: function(form) {

            $(form).ajaxSubmit({
                success: function(response) {

                    if( response == 'success' ) {
                        resetMyForm();
                    }
                    else {
                        alert('unsuccessful');
                    }

                }
            })
        }
    });

})




function resetMyForm() {

        $('#registerForm').resetForm();
        v.prepareForm();  // Tried adding this, no help
        v.hideErrors();  // Tried adding this, no help

}
4

2 に答える 2

5

resetFormフォームをリセットして、次のようなValidationプラグインメソッドを実行する必要があります。

var v = $("form").validate({
    submitHandler: function(form) {
            //resetForm is a method on the validation object, not the form
            v.resetForm(); 
            form.reset();
    }
});

それはあなたのワークフローをたどっている間に私が見た問題の世話をしているようでした。これを参照してください:http: //jsfiddle.net/nxXNz/27/

于 2012-01-30T18:14:52.073 に答える
0

このfocusout()を試してください

function resetMyForm() {

    $('#registerForm').resetForm();
    v.prepareForm();  // Tried adding this, no help
    v.hideErrors();  // Tried adding this, no help
    $("ElementName").focusout(); // focus out  which ever element you want

}

于 2012-01-24T02:20:04.620 に答える