关于formValidator-4.1.0 ajaxValidator校验 当input失去焦点时候不弹出提示框解决方法(因为当点击“返回”按钮)的时候也触发失去焦点事件,
其实要的效果是当点击返回按钮的时候不弹出提示框 ,但实际点击“返回”也是失去焦点所以也会弹出提示款,如图:
但是如果不是ajax的其它校验是可以的(就是失去焦点的时候不会弹出提示款),所以和同事看了源码,发现
//发送ajax请求
$.ajax(
{
type : setting.type,
url : ls_url,
cache : setting.cache,
data : setting.data,
async : setting.async,
timeout : setting.timeout,
dataType : setting.dataType,
success : function(data, textStatus, jqXHR){
var lb_ret,ls_status,ls_msg,lb_isValid = false;
$.formValidator.dealAjaxRequestCount(validatorGroup,-1);
//根据业务判断设置显示信息
lb_ret = setting.success(data, textStatus, jqXHR);
if((typeof lb_ret)=="string")
{
ls_status = "onError";
ls_msg = lb_ret;
}
else if(lb_ret){
lb_isValid = true;
ls_status = "onCorrect";
ls_msg = settings[0].onCorrect;
}else{
ls_status = "onError";
ls_msg = $.formValidator.getStatusText(elem,setting.onError);
//alert(ls_msg) //这个是ajax失去焦点的时候弹出的后台验证失败的框
}
setting.isValid = lb_isValid;
$.formValidator.setTipState(elem,ls_status,ls_msg);
//提交的时候触发了ajax校验,等ajax校验完成,无条件重新校验
if(returnObj.initConfig.status=="sumbitingWithAjax" && returnObj.initConfig.ajaxCountSubmit == 0)
{
if (initConfig.formID != "") {
$('#' + initConfig.formID).trigger('submit');
}
}
},
complete : function(jqXHR, textStatus){
if(setting.buttons && setting.buttons.length > 0){setting.buttons.attr({"disabled":false})};
setting.complete(jqXHR, textStatus);
},
beforeSend : function(jqXHR, configs){
//本控件如果正在校验,就中断上次
if (this.lastXMLHttpRequest) {this.lastXMLHttpRequest.abort()};
this.lastXMLHttpRequest = jqXHR;
//再服务器没有返回数据之前,先回调提交按钮
if(setting.buttons && setting.buttons.length > 0){setting.buttons.attr({"disabled":true})};
var lb_ret = setting.beforeSend(jqXHR,configs);
var isValid = false;
//无论是否成功都当做失败处理
setting.isValid = false;
if((typeof lb_ret)=="boolean" && lb_ret)
{
isValid = true;
$.formValidator.setTipState(elem,"onLoad",settings[returnObj.ajax].onWait);
}else
{
isValid = false;
$.formValidator.setTipState(elem,"onError",lb_ret);
}
setting.lastValid = "-1";
if(isValid){$.formValidator.dealAjaxRequestCount(validatorGroup,1);}
return isValid;
},
error : function(jqXHR, textStatus, errorThrown){
$.formValidator.dealAjaxRequestCount(validatorGroup,-1);
$.formValidator.setTipState(elem,"onError",$.formValidator.getStatusText(elem,setting.onError));
setting.isValid = false;
setting.error(jqXHR, textStatus, errorThrown);
},
processData : setting.processData
});
将“//alert(ls_msg) //这个是ajax失去焦点的时候弹出的后台验证失败的框”这句注释掉就OK了,就是这一行在搞鬼!所以注释掉完事大吉!!