jquery.validateで発生した問題
1990 ワード
シーン:jquery.validateプラグインはフォーム検証を行います.
操作:addmethodは、ユーザー名が重複しているかどうかを判断する検証ルールを追加します.このルールではajaxでサーバに結果をクエリーする必要があります.
質問:
1.ユーザー名が存在するかどうかにかかわらず、falseは常に返されるため、エラーメッセージは常に表示されます.
---この問題はajaxリクエスト時に同期が設定されていないためです.async:falseを加えるか、$を使うべきです.ajaxSetup({ async : false }); および$.ajaxSetup({ async : 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 })
操作: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 })