日期:2014-05-16 浏览次数:20758 次
?
/**
* ajaxValidate 服务端验证
* param {url:'必填',data:'传递的数据,为空:则自动绑定当前值,非空:则合并上当前值',若为字符串:则直接拼接到url,before:前置方法,after:后置方法}
* 服务端返回格式 {"rs":true,"msg":"","datas":{}} 可直接调用controller中的: this.outPrintSuccess(response,"") || this.outPrintFail(response, "占用");
* messages 中如果未填写 ajaxValidate:'' 属性,则错误信息为服务端返回的this.outPrintFail(response, "占用") 的提示信息 "占用"
* @author wjs 20120329
*/
jQuery.validator.addMethod("ajaxValidate", function(value, element, param) {
//url 验证
if(typeof(param.url) == 'undefined' || param.url == null || $.trim(param.url) == '') {
alert("参数URL为空");
return false;
}
//前置方法接口 参数为validator对象
if(typeof(param.before) == 'function') {
if(!param.before(this)){
return true;
}
}
//将url+上时间搓
var url = $.trim(param.url + "");
while(url.charAt(url.length-1) == '/'){
url = url.substring(0,url.length-2);
}
if(url.indexOf("?") == -1){
url += "?"+new Date().getTime();
}else{
url += "&"+new Date().getTime();
}
//将用户参数传递到服务端,并+入被验证字段的属性值
var data = {};
if(typeof(param.data) == 'undefined'){
data[$(element).attr("name")] = $.trim($(element).val());
}
if(typeof(param.data) == 'object'){
data = param.data;
if(typeof(data[$(element).attr("name")]) == "undefined"){
data[$(element).attr("name")] = $.trim($(element).val());
}
}
//数据位字符串类型
if(typeof(param.data) == 'string'){
var pData = $.trim(param.data);
url += "&"+pData+"&" + $(element).attr("name") + "=" + $.trim($(element).val());
}
//和前一个进行比较,如果值相同,则不发送ajax验证,直接将上一个提示信息显示出来
var validator = this;
var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].ajaxValidate;
this.settings.messages[element.name].ajaxValidate = previous.originalMessage;
if ( this.pending[element.name] ) {
return "pending";
}
if ( previous.old === value ) {
return previous.valid;
}
previous.old = value;
this.startRequest(element);
$.ajax({
url : url,
type : 'post',
data : data,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
dataType: 'json',
timeout: 10000,
error: function(){
alert('验证出现错误');
return false;
},
success: function(obj){
if(typeof(param.after) == 'function') {
param.after(validator,obj);
}
validator.settings.messages[element.name].ajaxValidate = previous.originalMessage;
if(obj.rs){
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
//清空错误信息
validator.showErrors();
}else{
var errors = {};
var message = validator.settings.messages[element.name].ajaxValidate || obj.msg;
errors[element.name] = message;
//设置错误提示信息
validator.showErrors(errors);
}
previous.valid = obj.rs;
validator.stopRequest(element, obj.rs);
return obj.rs;
}
});
}, "远程验证");
check: 加入如下代码,在ajax验证未返回时都将无法提交
if (method == 'ajaxValidate'){
var ems = $(element).parent().children("em");
if(ems.length > 0){
if(ems[0].style.display != "none"){
result = false;
}
}
}