我用的是jquery validationEngine这个插件。我需要在JS中做验证,不能在html页面上使用validate[]这种形式。
//验证函数
_validate = function(node,rules){
var nodeValue = $(node).val(),//input的值
nodeId = $(node).attr('id')//input的ID
tips = '',//提示信息
isPass = false,//如果验证不通过,则为false
tipStatus = '';//提示类型 pass,load,error
for(i in rules){
swith (i){
case 'required':
if(!nodeValue){
console.log(1);//执行顺序测试
isPass= false;
tipStatus = 'error';
tips += '* 此值不能为空'+'<br/>';
}
break;
case 'minSize':
....
break;
case 'ajax':
switch(rules.ajax){
case 'ajaxUserCall'://验证是否已注册
if(nodeValue && isPass){//其他验证成功的情况下才做此验证
$.get('./?mod=member&ac=check&op=username',
{
elId:nodeId,
elValue:nodeValue
},
function(data){
console.log(1);//执行顺序测试
if(data[1]){//返回成功
tipStatus = 'pass';
}else{
tipStatus = 'error';
}
tips = data[2];//返回的提示信息
}
);
}
break;
case 'ajax...':
....
break;
}
break;
}
}
//
tips = tips.substr(0,(tips.length - 5));
if(!isPass){
$(node).validationEngine('showPrompt',tips,tipStatus);
return false;
}
};
//具体验证
console.log(2);//执行顺序测试
$('#username').on('blur',function(){
_validate('#username',{'required':'','minSize':4,'ajax':'ajaxUserCall'});
});
遇到的问提是在验证required的时候isPass,tips,tipStatus赋的值都能传递到“具体验证”的位置,在console中打印出来是正常的。
但是在ajaxUserCall验证时的赋值,就无法传递到这里。打印出来的值是在var初始化时的值。
我在required和ajaxUserCall的回调函数中分别打印console.log(1),在“具体验证”的位置打印console.log(2)。
当我做required验证时,console中显示的是1,2。但在做ajax验证的时候,console打印出的是2,1。感觉ajax的回调函数是在整个函数执行完之后才执行的,是不是这个原因我也不太清楚。想请教一下,如何解决这个问题,能正确的传值。谢谢
https://github.com/posabsolute/jQuery-Validation-Engine#onvalidationcomplete