场景: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;
}
}
});
置均原来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
})