警告:没有为“+element.name+”定义消息");},formatAndAdd:function(元素,规则){var message=this.defaultMessage(元素,rule.method),theregex=/\$\{(\d+)\}/g;if(消息类型==“函数”){message=message.call(this,rule.parameters,element);}else if(theregex.test(消息)){message=jQuery.format(message.replace(theregex,'{$1}'),rule.parameters);}this.error列表.push({消息:消息,元素:元素});this.errorMap[element.name]=消息;this.submitted[element.name]=消息;},addWrapper:函数(toToggle){if(this.settings.wrapper)toToggle=toToggle.add(toToggel.parent(this.settings.wrapper));返回切换;},defaultShowErrors:function(){for(var i=0;this.errorList[i];i++){var error=this.errorList[i];this.settings.highlight&&this.setments.highight.call(this,error.element,this.setings.errorClass,this.settings.validClass);this.showLabel(error.element,error.message);}if(this.errorList.length){this.toShow=this.toShow.add(this.containers);}if(this.settings.success){for(var i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}}if(this.settings.unhighlight){for(var i=0,elements=this.validElements();元素[i];i++){this.settings.unhighlight.call(this,elements[i],this.setments.errorClass,this.settings.validClass);}}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return$(this.errorList).map(function()){返回this.element;});},showLabel:函数(元素、消息){var label=this.errorsFor(元素);if(标签长度){//刷新错误/成功类label.removeClass().addClass(this.settings.errorClass);//检查是否有生成的标签,然后替换消息label.attr(“生成的”)&&label.html(消息);}其他{//创建标签label=$(“<”+this.settings.errorElement+“/>”).attr({“for”:this.idOrName(元素),生成:true}).addClass(this.settings.errorClass).html(消息“”);if(this.settings.wrapper){//确保元素可见,即使在IE中也是如此//实际显示被包装的元素是在其他地方处理的label=label.hide().show().wrap(“<”+this.settings.wrapper+“/>”).parent();}if(!this.labelContainer.append(label).length)this.settings.error位置? this.settings.errorPlacement(标签,$(元素)):label.insertAfter(元素);}如果(!消息&&this.settings.success){label.text(“”);this.settings.success==“string”的类型? label.addClass(this.settings.success):this.settings.success(标签);}this.toShow=this.toShow.add(标签);},errorsFor:函数(元素){var name=this.idOrName(元素);return this.errors().filter(function(){return$(this).attr('for')==name;});},idOrName:函数(元素){是否返回this.groups[element.name]||(this.checkable(element)?element.name:element.id | | element.name);},可检查:函数(元素){return/radio |复选框/i.test(element.type);},findByName:函数(名称){//按名称选择并按窗体筛选性能而不是form.find(“[名称=…]”)var表单=this.currentForm;return$(document.getElementsByName(name)).map(function(index,element)){return element.form==表单&&element.name==名称&&element ||null;});},getLength:函数(值,元素){switch(element.nodeName.toLowerCase()){案例“选择”:return$(“option:selected”,element).length;案例“输入”:if(this.checkable(元素))return this.findByName(element.name).filter(':checked’).length;}返回值.length;},依赖:函数(参数,元素){return this.dependTypes[参数类型]? this.dependTypes[参数类型](参数,元素):true;},依赖类型:{“boolean”:函数(参数,元素){返回参数;},“string”:函数(param,元素){返回$(param,element.form).长度;},“function”:函数(param,element){返回参数(元素);}},可选:函数(元素){返回!$。validator.methods.required.call(this,$.trim(element.value),element)&&“dependency-mismatch”;},startRequest:函数(元素){if(!this.pending[element.name]){this.pendingRequest++;this.pending[element.name]=true;}},stopRequest:函数(元素,有效){this.pendingRequest--;//有时同步失败,请确保pendingRequest从不小于0if(this.pendingRequest<0)this.pendingRequest=0;删除this.pending[element.name];if(有效的&&this.pendingRequest==0&&this.formSubmitted&&thix.form()){$(this.currentForm).submit();this.formSubmitted=假;}else if(!valid&&this.pendingRequest==0&&this.formSubmitted){$(this.currentForm).triggerHandler(“invalid-form”,[this]);this.formSubmitted=假;}},previousValue:函数(元素){return$.data(element,“previousValue”){旧:空,有效:true,消息:this.defaultMessage(元素,“remote”)});}},类规则设置:{/*//注释所有默认验证规则必需:{required:true},电子邮件:{email:true},url:{url:true},日期:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},数字:{number:true},numberDE:{numberDE:true},数字:{digits:true},信用卡:{creditcard:true}*/},addClassRules:函数(className,规则){className.constructor==字符串?this.classRuleSettings[className]=规则:$.extend(this.classRuleSettings,className);},classRules:函数(元素){var规则={};var类=$(element).attr('class');classes&&$.each(classes.split(“”),function(){if(在$.validator.classRuleSettings中){$.extend(规则,$.validator.classRuleSettings[this]);}});返回规则;},attributeRules:函数(元素){var规则={};var$element=$(元素);for($.validator.methods中的var方法){var值=$element.attr(方法);if(值){规则[方法]=值;}}//对于文本输入,maxlength可以作为-1、2147483647(IE)和524288(safari)返回if(rules.maxlength&&/-1 | 2147483647 | 524288/.test(rules.maxlength)){删除rules.maxlength;}返回规则;},metadataRules:函数(元素){if(!$.metadata)返回{};var meta=$.data(element.form,'validator').settings.meta;返回meta?$(element).metadata()[meta]:$(元素).metadata();},staticRules:函数(元素){var规则={};var验证器=$.data(element.form,'validator');if(validator.settings.rules){rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};}返回规则;},normalizeRules:函数(规则,元素){//处理相关性检查$.each(规则、函数(prop、val){//当param显式为false时忽略规则,例如required:falseif(val===假){删除规则[prop];回报;}if(val.param | | val.depends){var keepRule=true;开关(val.depends类型){案例“字符串”:keepRule=$(val.depends,element.form).长度;断裂;案例“功能”:keepRule=val.depends.call(element,element);断裂;}if(keepRule){rules[prop]=val.param!==未定义?val.param:真;}其他{删除规则[prop];}}});//评估参数$.each(规则、函数(规则、参数){rules[rule]=$.isFunction(参数)?parameter(element):参数;});//清除数字参数$.each(['minlength','maxlength],'min,'max'],function(){if(规则[this]){rules[this]=数字(rules[this]);}});$.each(['rangelength','range'],函数(){if(规则[this]){rules[this]=[编号(rules[this][0]),编号(rules[this][1])];}});if($.validator.autoCreateRanges){//自动创建范围if(rules.min和rules.max){rules.range=[rules.min,rules.max];删除rules.min;删除rules.max;}if(rules.minlength&&rules.maxlength){rules.rangelength=[rules.minlength,rules.maxlength];删除rules.minlength;删除规则。最大长度;}}//要支持元数据中的自定义消息,请忽略标题为“消息”的规则方法if(rules.messages){删除rules.messages;}返回规则;},//将简单字符串转换为{string:true}规则,例如,将“required”转换为{required:true}normalizeRule:函数(数据){if(数据类型==“字符串”){var转换={};$.each(data.split(/\s/),函数(){transformed[this]=true;});数据=转换;}返回数据;},// http://docs.jquery.com/Plugins/Validation/Validator/addMethod(插件/验证程序/添加方法)addMethod:函数(名称、方法、消息){$.validator.methods[name]=方法;$.validator.messages[name]=消息!=未定义?消息:$.validator.messages[名称];if(方法长度<3){$.validator.addClassRules(名称,$.valdator.normalizeRule(名称));}},方法:{// http://docs.jquery.com/Plugins/Validation/Methods/required必需:函数(值、元素、参数){//检查是否满足依赖关系if(!this.depend(param,element))return“dependency-mismatch”;switch(element.nodeName.toLowerCase()){案例“选择”://可以是用于选择多个的数组或字符串,这样都可以var val=$(元素).val();返回值&&val.length>0;案例“输入”:if(this.checkable(元素))return this.getLength(value,element)>0;违约:返回$.trim(value).length>0;}},// http://docs.jquery.com/Plugins/Validation/Methods/remote远程:函数(值、元素、参数){if(this.optional(元素))return“依赖项不匹配”;var previous=this.previousValue(元素);if(!this.settings.messages[element.name])this.settings.messages[element.name]={};previous.originalMessage=this.settings.messages[element.name].remote;this.settings.messages[element.name].remote=先前的消息;param=typeofparam==“string”&{url:param}||param;if(this.pending[element.name]){return“pending”;}if(previous.old===值){返回previous.valid;}previous.old=值;var验证器=此;this.startRequest(元素);var数据={};data[element.name]=值;$.ajax($.extend(true{url:参数,模式:“中止”,端口:“validate”+element.name,数据类型:“json”,数据:数据,成功:功能(响应){validator.settings.messages[element.name].remote=previous.originalMessage;var有效=响应===真;if(有效){var submitted=validator.formSubmitted;validator.prepareElement(元素);validator.formSubmitted=已提交;validator.successList.push(元素);validator.showErrors();}其他{var错误={};var message=响应||validator.defaultMessage(element,“remote”);errors[element.name]=之前的消息=$.isFunction(消息)?消息(值):消息;validator.showErrors(错误);}previous.valid=有效;validator.stopRequest(元素,有效);}},param));return“pending”;},// http://docs.jquery.com/Plugins/Validation/Methods/minlengthminlength:函数(值、元素、参数){return this.optional(element)||this.getLength($.trim(value),element)>=param;},// http://docs.jquery.com/Plugins/Validation/Methods/maxlengthmaxlength:函数(值、元素、参数){return this.optional(element)||this.getLength($.trim(value),element)<=param;},// http://docs.jquery.com/Plugins/Validation/Methods/rangelengthrangelength:函数(值、元素、参数){var length=this.getLength($.trim(value),元素);return this.optional(element)|(length>=param[0]&&length<=param[1]);},// http://docs.jquery.com/Plugins/Validation/Methods/min(插件/验证/方法)min:函数(值、元素、参数){返回this.optional(element)||value>=param;},// http://docs.jquery.com/Plugins/Validation/Methods/max(插件/验证/方法)max:函数(值、元素、参数){return this.optional(element)值<=param;},// http://docs.jquery.com/Plugins/Validation/Methods/range范围:函数(值、元素、参数){返回this.optional(element)|(value>=param[0]&&value<=param[1]);},// http://docs.jquery.com/Plugins/Validation/Methods/email电子邮件:功能(值、元素){//Scott Gonzalez提供:http://projects.scottsplayground.com/email_address_validation/返回此.optional(元素)||/^((([a-z]|\d|[!#\$%&'\*\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+FDCF\uFDF0-\uFFEF])+)*)|(\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\ u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b \x0c-\x0d-\x7f)|[\u00A0-\uD7 FF\uF 900-\u FDCF\u FDF0-\ uFFEF]))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|[a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))。)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|([a-z]|[\u 00A0-\ uD7FF\uF900-\ uFDCF\ uFDF0-\uFFEF])([a-z]|\d |-|\.|_|~|[u00A0-\uD7 FF\uF 900-\u FDCF\u FDF0-\ uFFEF)*7FF\uF900-\uFDCF\uFDF0-\uFFEF]))$/i.测试(值);},// http://docs.jquery.com/Plugins/Validation/Methods/urlurl:函数(值、元素){//Scott Gonzalez提供:http://projects.scottsplayground.com/iri(网址:http://projects.scottsplayground.com/iri)/返回this.optional(元素)||/^(https?|ftp):\/\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\。(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\。(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\。(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])| 7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\u F900-\ uFDCF\ uFDF0-\uFFEF]))))+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|([a-z]|[\u 00A0-\ uD7FF\uF900-\ uFDCF\ uFDF0-\uFFEF])([a-z]|\d |-|\.|_|~|[u00A0-\uD7 FF\uF 900-\u FDCF\u FDF0-\ uFFEF)*7FF\uF900-\uFDCF\uFDF0-\uFFEF]))。?)(:\ d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/)|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\u E000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)$/i.测试(值);},// http://docs.jquery.com/Plugins/Validation/Methods/date日期:函数(值、元素){返回this.optional(元素)/无效的|NaN/.test(新日期(值));},// http://docs.jquery.com/Plugins/Validation/Methods/dateISOdateISO:函数(值,元素){返回此.optional(元素)|/^\d{4}[\/-]\d{1,2}[\//-]\d{1,2{$/.test(值);},// http://docs.jquery.com/Plugins/Validation/Methods/number(插件/验证/方法)number:函数(值、元素){返回this.optional(元素)|/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/。测试(值);},// http://docs.jquery.com/Plugins/Validation/Methods/digits(插件/验证/方法/数字)数字:函数(值、元素){返回this.optional(元素)||/^\d+$/.test(值);},// http://docs.jquery.com/Plugins/Validation/Methods/creditcard(插件/验证/方法/信用卡)//基于http://en.wikipedia.org/wiki/Luhn信用卡:功能(值,元素){if(this.optional(元素))return“dependency-mismatch”;//只接受数字和破折号if(/[^0-9-]+/.test(值))返回false;var nCheck=0,n位数=0,bEven=错误;value=value.replace(/\D/g,“”);对于(var n=值.长度-1;n>=0;n--){var cDigit=值.charAt(n);var nDigit=解析整数(cDigit,10);if(b偶数){如果((n位*=2)>9)n数字-=9;}nCheck+=数字;b偶数=!b偶数;}return(nCheck%10)==0;},// http://docs.jquery.com/Plugins/Validation/Methods/accept接受:函数(值、元素、参数){param=typeof param==“string”?param.replace(/,/g,'|'):“png|jpe?g|gif”;return this.optional(element)||value.match(new RegExp(“.(”+param+“)$”,“i”));},// http://docs.jquery.com/Plugins/Validation/Methods/equalTo(http://docs.jquery.com/Plugins/Validation/Methods/equalTo)equalTo:函数(值、元素、参数){//绑定到目标的模糊事件,以便在更新目标字段时重新验证//TODO找到了一种只绑定事件一次的方法,避免了unbind-rebind开销var target=$(param).unbind(“.validate-equalTo”).bind(”blur.validate-equalTo“,function(){$(元素).valid();});返回值==target.val();}}});//已弃用,请改用$.validator.format$.format=$.validator.format;})(jQuery);//ajax模式:中止//用法:$.ajax({mode:“abort”[,port:“uniqueport”]});//如果使用模式:“abort”,则通过XMLHttpRequest.abort()中止该端口上的上一个请求(端口可能未定义);(函数($){var pendingRequests={};//如果可用,使用预滤器(1.5+)if($.ajaxPrefilter){$.ajaxPrefilter(功能(设置,_,xhr){var端口=settings.port;if(settings.mode==“中止”){if(pendingRequests[port]){pendingRequests[port].abort();}pendingRequests[port]=xhr;}});}其他{//代理ajaxvar ajax=$.ajax;$.ajax=功能(设置){var mode=(设置中的“mode”?设置:$.ajaxSettings).mode,port=(settings中的“port”?settings:$.ajaxSettings).port;if(模式==“中止”){if(pendingRequests[port]){pendingRequests[port].abort();}return(pendingRequests[port]=ajax.apply(this,arguments));}返回ajax.apply(this,参数);};}})(jQuery);//提供跨浏览器聚焦和聚焦事件//IE具有本机支持,在其他浏览器中,使用事件caputuring(无气泡)//提供委托(类型:String,委托:Selector,处理程序:Callback)插件以简化事件委托//只有当$(event.target).is(delegate)位于event.target的jquery-object范围内时,才会调用处理程序;(函数($){//仅在jQuery核心未提供时实现(自1.4起)//TODO验证jQuery 1.4的实现是否与旧的jQuery特殊事件API兼容if(!jQuery.event.special.focusin&&!jQuery_event.special.focusout&&document.addEventListener){每个$({焦点:'焦点',模糊:“focusout”},函数(原始,修复){$.event.special[fix]={设置:函数(){this.addEventListener(原始,处理程序,true);},teardown:函数(){this.removeEventListener(原始,处理程序,true);},处理程序:函数(e){参数[0]=$.event.fix(e);arguments[0].type=修复;return$.event.handle.apply(this,arguments);}};函数处理程序(e){e=$.event.fix(e);e.type=修复;return$.event.handle.call(this,e);}});};扩展美元($.fn{validateDelegate:函数(委托、类型、处理程序){return this.bind(类型,函数(事件){var目标=$(event.target);if(target.is(delegate)){返回处理程序.apply(target,arguments);}});}});})(jQuery);