?
/** * 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; } } }