/***jQuery验证插件1.8.0** http://bassistance.de/jquery-plugins/jquery-plugin-validation/* http://docs.jquery.com/Plugins/Validation(插件/验证)**版权所有(c)2006-2011 Jörn Zaefferer**MIT和GPL许可证下的双重许可:* http://www.opensource.org/licenses/mit-license.php* http://www.gnu.org/licenses/gpl.html*/(函数($){扩展美元($.fn{// http://docs.jquery.com/Plugins/Validation/validate(插件/验证)验证:函数(选项){//如果未选择任何内容,则不返回任何内容;无论如何都无法链接if(!this.length){options&&options.debug&&window.console&&console.warn(“未选择任何内容,无法验证,未返回任何内容”);回报;}//检查是否已创建此表单的验证器var验证器=$.data(这个[0],“验证器”);if(验证器){返回验证器;}validator=新的$.validator(选项,此[0]);$.data(此[0],“验证器”,验证器);if(validator.settings.onsubmit){//通过向提交按钮添加cancel类来禁止验证this.find(“输入,按钮”).filter(“取消”).click(function(){validator.cancelSubmit=true;});//使用submitHandler时,捕获提交按钮if(validator.settings.submitHandler){this.find(“input,button”).filter(“:submit”).click(function(){validator.submitButton=此;});}//提交时验证表单this.submit(函数(事件){如果(validator.settings.debug)//阻止表单提交以查看控制台输出event.proventDefault();函数handle(){if(validator.settings.submitHandler){if(validator.submitButton){//插入隐藏的输入以替换缺少的提交按钮var隐藏=$(““).attr(”name“,validator.submitButton.name).val(validator.SubmitButten.value).appendTo(valdator.currentForm);}validator.settings.submitHandler.call(validator,validator.currentForm);if(validator.submitButton){//并在事后进行清理;由于无块示波器,可以引用hiddenhidden.remove();}返回false;}返回true;}//防止提交无效表单或自定义提交处理程序if(validator.cancelSubmit){validator.cancelSubmit=false;返回手柄();}if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;返回false;}返回手柄();}其他{validator.focusInvalid();返回false;}});}返回验证器;},// http://docs.jquery.com/Plugins/Validation/valid有效:函数(){if($(this[0]).is('form')){return this.validate().form();}其他{var有效=真;var验证器=$(this[0].form).validate();this.each(函数(){valid&=validator.element(this);});退货有效;}},//属性:要检索和删除的以空格分隔的属性列表removeAttrs:函数(属性){var结果={},$element=此;$.each(attributes.split(/\s/),函数(index,value){结果[value]=$element.attr(value);$element.removeAttr(值);});返回结果;},// http://docs.jquery.com/Plugins/Validation/rules规则:函数(命令、参数){var元素=此[0];if(命令){var settings=$.data(element.form,'validator').settings;var staticRules=settings.rules;var existingRules=$.validator.staticRules(元素);开关(命令){案例“添加”:$.extend(existingRules,$.validator.normalizeRule(参数));staticRules[element.name]=现有规则;if(参数.messages)settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);断裂;案例“删除”:if(!参数){删除staticRules[element.name];返回现有规则;}var过滤={};$.each(参数.split(/\s/),函数(索引,方法){filtered[method]=现有规则[method];删除现有规则[方法];});返回过滤;}}var数据=$.validator.normalizeRules(扩展美元({},$.validator.metadataRules(元素),$.validator.classRules(元素),//注释掉默认验证,CRM-8334//$.validator.attributeRules(元素),$.validator.staticRules(元素)),元素);//确保必填项在前面if(需要数据){var param=所需数据;删除数据。必填;data=$.extend({required:param},data);}返回数据;}});//自定义选择器$.extend($.expr[“:”]{// http://docs.jquery.com/Plugins/Validation/blank空白:函数(a){return!$.trim(“”+a.value);},// http://docs.jquery.com/Plugins/Validation/filled填充:函数(a){return!!$.trim(“”+a.value);},// http://docs.jquery.com/Plugins/Validation/uncheckedunchecked:函数(a){return!a.checked;}});//验证器的构造函数$.validator=函数(选项、形式){this.settings=$.extend(true,{},$.validator.defaults,options);this.currentForm=表单;this.init();};$.validator.format=函数(源,参数){if(arguments.length==1)返回函数(){var args=$.makeArray(参数);args.unshift(源);return$.validator.format.apply(this,args);};if(arguments.length>2&&params.constructor!=数组){params=$.makeArray(参数).slice(1);}if(params.constructor!=数组){参数=[参数];}$.each(参数,函数(i,n){source=source.replace(新RegExp(“\\{”+i+“\\}”,“g”),n);});回流源;};$.extend($.validator{默认值:{消息:{},组:{},规则:{},errorClass:“错误”,validClass:“有效”,errorElement:“标签”,焦点无效:true,错误容器:$([]),errorLabelContainer:$([]),onsubmit:正确,忽略:[],ignoreTitle:假,onfocusin:函数(元素){this.lastActive=元素;//如果启用,则隐藏错误标签并删除焦点上的错误类if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.setments.unhight.call(this,element,this.setings.errorClass,this.settings.validClass);this.addWrapper(this.errorsFor(element)).hide();}},onfocusout:函数(元素){if(!this.checkable(element)&&(this.submitted中的element.name){this.element(元素);}},onkeyup:函数(元素){if(this.submitted||element=this.lastElement中的element.name){this.element(元素);}},onclick:function(元素){//单击选择、单选按钮和复选框if(this.submitted中的element.name)this.element(元素);//或选项元素,在这种情况下选中父选项else if(this.submitted中的element.parentNode.name)this.element(element.parentNode);},突出显示:function(element,errorClass,validClass){$(element).addClass(errorClass).removeClass(validClass);},unhighlight:function(element,errorClass,validClass){$(element).removeClass(errorClass).addClass(validClass);}},// http://docs.jquery.com/Plugins/Validation/Validator/setDefaultssetDefaults:函数(设置){$.extend($.validator.defaults,设置);},消息:{required:“此字段为必填字段。”,remote:“请修复此字段。”,电子邮件:“请输入有效的电子邮件地址。”,url:“请输入有效的url。”,date:“请输入有效日期。”,dateISO:“请输入有效日期(ISO)。”,number:“请输入有效数字。”,数字:“请只输入数字。”,creditcard:“请输入有效的信用卡号。”,equalTo:“请再次输入相同的值。”,accept:“请输入带有有效扩展名的值。”,maxlength:$.validator.format(“请输入不超过{0}个字符。”),minlength:$.validator.format(“请至少输入{0}个字符。”),rangelength:$.validator.format(“请输入长度介于{0}和{1}个字符之间的值。”),范围:$.validator.format(“请输入介于{0}和{1}之间的值。”),max:$.validator.format(“请输入小于或等于{0}的值。”),min:$.validator.format(“请输入大于或等于{0}的值。”)},autoCreateRanges:false,原型:{init:函数(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.ettings.error标签容器);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var组=(this.groups={});$.each(this.settings.groups,函数(键,值){$.each(值.split(/\s/),函数(索引,名称){组[名称]=键;});});var规则=this.settings.rules;$.each(规则、函数(键、值){rules[key]=$.validator.normalizeRule(value);});函数委托(事件){var验证器=$.data(这个[0].form,“验证器”),eventType=“on”+event.type.replace(/^validate/,“”);if(!验证器)回报;validator.settings[eventType]&&validator.settings[事件类型].call(validator,this[0]);}$(this.currentForm).validateDelegate(“:text,:password,:file,select,textarea”,“focusin-focusout keyup”,委托).validateDelegate(“:radio,:checkbox,select,option”,“click”,delegate);if(this.settings.invalidHandler)$(this.currentForm).bind(“invalid-form.validate”,this.settings.invalidHandler);},// http://docs.jquery.com/Plugins/Validation/Validator/form表单:函数(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid())$(this.currentForm).triggerHandler(“invalid-form”,[this]);this.showErrors();return this.valid();},checkForm:函数(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());元素[i];i++){this.check(元素[i]);}return this.valid();},// http://docs.jquery.com/Plugins/Validation/Validator/element(插件/验证程序/元素)元素:函数(元素){元素=this.clean(元素);this.lastElement=元素;this.prepareElement(元素);this.currentElements=$(元素);var结果=this.check(元素);if(结果){删除this.invalid[element.name];}其他{this.invalid[element.name]=true;}if(!this.numberOfInvalids()){//隐藏上次错误的错误容器this.toHide=this.toHide.add(this.containers);}this.showErrors();返回结果;},// http://docs.jquery.com/Plugins/Validation/Validator/show错误showErrors:函数(错误){if(错误){//将项目添加到错误列表和映射$.extend(this.errorMap,错误);this.errorList=[];for(错误中的var名称){this.errorList.push(此错误列表推送)({消息:错误[名称],元素:this.findByName(名称)[0]});}//从成功列表中删除项目this.successList=$.grep(this.sucessList,函数(元素){返回!(element.name出错);});}this.settings.show错误? this.settings.showErrors.call(this,this.errorMap,this.rrorList):this.defaultShowErrors();},// http://docs.jquery.com/Plugins/Validation/Validator/resetFormresetForm:函数(){if($.fn.resetForm)$(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass);},无效数量:函数(){return this.objectLength(this.invalid);},objectLength:函数(obj){var计数=0;for(obj中的var i)计数++;返回计数;},hideErrors:function(){this.addWrapper(this.toHide).hide();},有效:函数(){return this.size()==0;},大小:函数(){返回this.errorList.length;},焦点无效:函数(){if(this.settings.focusInvalid){尝试{$(this.findLastActive()||this.errorList.length&&this.error列表[0].element||[]).filter(“:可见”).focus()//手动触发事件焦点;如果没有它,则不会调用focusin处理程序,findLastActive将找不到任何东西.触发器(“focusin”);}捕捉(e){//聚焦隐藏元素时忽略IE引发错误}}},findLastActive:函数(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,函数(n){return n.element.name==lastActive.name;}).length==1&&lastActive;},元素:function(){var验证器=此,rulesCache={};//选择表单内的所有有效输入(无提交或重置按钮)//解决方法$Query([]).add untilhttp://dev.jquery.com/ticket/2114已解决return$([]).add(this.currentForm.elements).filter(“:输入”).not(“:提交,:重置,:图像,[禁用]”).not(this.settings.ignore).filter(函数(){!this.name&&validator.settings.debug&&window.console&&console.error(“%o没有指定名称”,this);//只为每个名称选择第一个元素,并且只选择那些指定了规则的元素if(rulesCache||!validator.objectLength($(this).rules())中的this.name)返回false;rulesCache[this.name]=true;返回true;});},清除:函数(选择器){返回$(选择器)[0];},错误:function(){return$(this.settings.errorElement+“.”+this.setings.errorClass,this.errorContext);},重置:函数(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);this.currentElements=$([]);},prepareForm:函数(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:函数(元素){this.reset();this.toHide=this.errorsFor(元素);},检查:功能(元素){元素=this.clean(元素);//如果是单选/复选框,则验证组中的第一个元素if(this.checkable(元素)){element=this.findByName(element.name).not(this.settings.ignore)[0];}var规则=$(element).rules();var dependencyMismatch=false;for(规则中的var方法){var规则={method:method,参数:rules[method]};尝试{var result=$.validator.methods[method].call(this,element.value.replace(/\r/g,“”),element,rule.parameters);//如果方法指示该字段是可选的,因此是有效的,//当没有其他规则时,不要将其标记为有效if(结果==“dependency-mismatch”){dependencyMismatch=true;继续;}dependencyMismatch=false;if(结果==“待定”){this.toHide=this.toHide.not(this.errorsFor(元素));回报;}if(!result){this.formatAndAdd(元素,规则);返回false;}}捕捉(e){this.settings.debug&&window.console&&console.log(“检查元素时发生异常”+element.id+“,检查“+rule.method+”“”方法”,e);抛出e;}}if(相关性不匹配)回报;if(this.objectLength(rules))this.successList.push(元素);返回true;},//返回给定元素和验证方法的自定义消息//在元素的“messages”元数据中指定customMetaMessage:函数(元素、方法){if(!$.metadata)回报;var meta=this.settings.meta? $(element).metadata()[this.settings.meta]:$(元素).metadata();return meta&&meta.messages&&meta.messages[method];},//返回给定元素名称和验证方法的自定义消息customMessage:函数(名称、方法){var m=this.settings.messages[名称];return m&&(m.constructor==字符串? :m[方法]);},//返回第一个定义的参数,允许空字符串findDefined:function(){for(var i=0;i<参数长度;i++){if(参数[i]!==未定义)返回参数[i];}返回未定义;},defaultMessage:函数(元素、方法){返回this.findDefined(this.customMessage(元素名称,方法),this.customMetaMessage(元素、方法),//标题永远不会未定义,所以将空字符串处理为未定义!this.settings.ignoreTitle&&element.title未定义,$.validator.messages[方法],"警告:没有为“+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);