jquery.validateで発生した問題

1990 ワード

シーン:jquery.validateプラグインはフォーム検証を行います.
操作:addmethodは、ユーザー名が重複しているかどうかを判断する検証ルールを追加します.このルールではajaxでサーバに結果をクエリーする必要があります.
質問:
1.ユーザー名が存在するかどうかにかかわらず、falseは常に返されるため、エラーメッセージは常に表示されます.
---この問題はajaxリクエスト時に同期が設定されていないためです.async:falseを加えるか、$を使うべきです.ajaxSetup({ async : false }); および$.ajaxSetup({ async : true }); 
$.ajaxSetup({ async : false });
$.get(url, function(data){
        
                if(data==(value+"exist"))
                {
                      result = false;
                }
                else if(data==(value+"OK"))
                {
           result = true;
                }
        
            });

$.ajaxSetup({ async : true });

または
$.ajax({
      url: url,
      type: 'POST',
      async: false,
      success: function(data) {
        if(data==(value+"exist"))
                {
                      result = false;
                }
                else if(data==(value+"OK"))
                {
           result = true;
                }

      }
    });

2.addmethodでajaxリクエストは正しい結果を返すことができますが、存在しないユーザー名は登録コミットに成功したときに常に「ユーザー名がすでに存在する」というエラーメッセージが表示されることがわかります.fierbugでユーザー名が2回検証されたことを発見しました.
すべて元のjquery.validateでonsubmit,onfocusout,onkeyupのデフォルト設定はtrueです.一般に、ユーザーがフォームをコミットする前に検証され、onsubmitはコミット時にもう一度検証されます.最初の認証で存在しないユーザー名は存在しませんが、コミットが完了すると、そのユーザー名が登録されているため、再検証するとエラーメッセージが表示されます.onsubmitをfalseに設定すればいいです.
検証のタイミング:
jquery.validateは、検証動作onsubmit:コミット時に$(".selector")を検証するかどうかをいつトリガーするかを容易に設定することができる.validate({onsubmit:false})onfocusout:フォーカスを失った場合の検証(checkboxes/radioを除く)$(".selector").validate({onfocusout:false})onkeyup:keyupで$(".selector").validate({onkeyup:false})onclick:checkboxes、radioクリック時に検証します.$(".selector").validate({ onclick: false })