jQuery插件之validation插件(3)

但实际上,validate插件只是将label标签添加了一个'success'类,且原先的'error'类并没有删除。且经过实际测试,'error'类名无法删除,删除之后,每次验证成功时,validate插件都会自动再生成一个label标签

所以,success的效果无法正常使用,这应该是validate插件的一个bug

<style> label.error{background: no-repeat 0 4px;background-image:url('unchecked.gif');margin-left:6px;padding-left:14px;color:red;} </style> <body> <form> <p> <label for="username">用户名:</label> <input type="text" /> </p> <p> <label for="email">电子邮件:</label> <input /> </p> <p> <label for="url">网址:</label> <input/> </p> <p> <input type="submit" value="登录"/> </p> </form> <script> $('#demoForm').validate({ rules:{ username:{ required: true, minlength: 2, maxlength: 10 }, email:{ required: true, email:true }, url:{ required: true, url:true } }, messages:{ username:{ required:"请输入用户名", minlength:"至少输入{0}个字符", maxlength:"最多输入{0}个字符" }, email:{ required:"请输入邮箱", email:"邮箱格式不正确" }, url:{ required:"请输入网址", url:"网址格式不正确(完整的网址应包括或https://)" } } }) </script>

自定义验证

由于需求的需要,除提供的默认验证规则外,还需要自定义验证规则,满足业务需要。这时就需要使用addMethod()方法

【addMethod(】

addMethod(name,method,message)方法用来添加一个新的验证方法

参数 name 是添加的方法的名字。参数 method 是一个函数,接收三个参数 (value,element,param)。value 是元素的值,element 是元素本身,param 是参数

以验证手机号为例,手机号一般是11位,前3位是号段,后8位一般没有限制。而且,在手机开头很可能有0或+86

//开头 (0|\+86)? //前3位 13\d|14[579]|15[0-35-9]|17[0135-8]|18\d //后8位 \d{8} //手机号码 var phone = /^(0|\+86)?(13\d|14[579]|15[0-35-9]|17[0135-8]|18\d)\d{8}$/;

$.validator.addMethod({ 'phone', function(value,element,param){ var reg = /^(0|\+86)?(13\d|14[579]|15[0-35-9]|17[0135-8]|18\d)\d{8}$/; return value.test(reg); }, '请输入正确的手机号码' })

<style> label.error{margin-left:6px;padding-left:14px;color:red;background: no-repeat 0 4px;background-image:url('data:image/gif;base64,R0lGODlhDgAOAMQAAOpSAPWpgPvf0O5zMPGIUPe+n////+tdEPjJsP718POecO1oIPrUwPzq4Pa0kPKTYPSof////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUABEALAAAAAAOAA4AAAVcYCQm0AAAA5SIbHGcMHAULazEJ528AGIsgADDIUsEYAYDopBsAAOmXDLpOkVPB0ETFxskpjeY6fD4GhrJBAF1zCYDBx/jFYi8DoEH9yAqcGM0fTwxMywsUFZ1LCEAOw==');} </style> <form> <p> <label for="phone">手机号码:</label> <input type="text" /> </p> <p> <input type="button" value="提交"> </p> </form> <script> $.validator.addMethod( 'phone', function(value,element,param){ var reg = /^(0|\+86)?(13\d|14[579]|15[0-35-9]|17[0135-8]|18\d)\d{8}$/; return reg.test(value); }, '请输入正确的手机号码' ); $('#demoForm').validate({ rules:{ phone:{ required: true, phone:true } }, messages:{ phone:{ required:"请输入手机号码" } } }) </script>

修改触发方式

下面的虽然是 boolean 型的,但建议除非要改为 false,否则别乱添加

触发方式      类型   描述                         默认值 onsubmit     Boolean 提交时验证。设置为 false 就用其他方法去验证     true onfocusout    Boolean 失去焦点时验证(不包括复选框/单选按钮)         true onkeyup     Boolean 在 keyup 时验证。                   true onclick     Boolean 在点击复选框和单选按钮时验证              true focusInvalid  Boolean 提交表单后,未通过验证的表单会获得焦点          true focusCleanup  Boolean 如果是true,当未通过验证的元素获得焦点时,移除错误提示 false

远程校验

使用 ajax 方式进行验证,默认会提交当前验证的值到远程地址,如果需要提交其他的值,可以使用 data 选项

[注意]远程地址只能输出 "true" 或 "false",不能有其他输出

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwyxwz.html