本文实例讲述了jQuery实现高度灵活的表单验证功能。分享给大家供大家参考,具体如下:
表单验证是前端开发过程中常见的一个需求,产品需求、业务逻辑的不同,表单验证的方式方法也有所区别。而最重要的是我们要清楚,表单验证的核心原则是——错误信息提示准确,并且尽可能少的打扰/干扰用户的输入和体验。
该插件依赖于jQuery,demo地址:https://github.com/CaptainLiao/zujian/tree/master/validator
基于以上原则,个人总结出表单验证的通用方法论:
为了使开发思路更加清晰,我将表单验证的过程分为两步:第一步,用户输入完验证当前输入的有效性;第二步,表单提交时验证整个表单。考虑如下布局:
<form action=""> <ul> <li><label for="username">用户名</label> <input type="text" name="username" id="username" placeholder="用户名"/></li> <li> <label for="password">密码</label> <input type="text" name="password" id="password" placeholder="密码"/> </li> <li> <label for="password">确认密码</label> <input type="text" name="password2" id="password-confirm" placeholder="确认密码"/> </li> <li> <label for="phone">手机</label> <input type="text" name="mobile" id="phone"/> </li> <li> <label for="email">邮箱</label> <input type="text" name="email" id="email"/> </li> </ul> <button type="submit" id="submit-btn">提交</button> </form>
一个较为通用的JS验证版本如下:
(function (window, $, undefined) { /** * @param {String} $el 表单元素 * @param {[Array]} rules 自定义验证规则 * @param {[Boolean]} isCheckAll 表单提交前全文验证 * @param {[Function]} callback 全部验证成功后的回调 * rules 支持四个字段:name, rule, message, equalTo */ function Validator($el, rules, isCheckAll, callback) { var required = 'required'; var params = Array.prototype.slice.call(arguments); this.$el = $el; this._rules = [ {// 用户名 username: required, rule: /^[\u4e00-\u9fa5\w]{6,12}$/, message: '不能包含敏感字符' }, {// 密码 password: required, rule: /^("placeholder") "placeholder") : '信息'; // 定义错误提示信息 if(val && val != 'undefined') { // 值不为空 if(ranges) { // 边界限定 range = ranges[0]; min = range.split(',')[0] "error-msg">请输入'+min+'-'+max+'位'+placeholderTxt+'</span>'; }else if(min) { errorMsg = '<span class="error-msg">最少输入'+min+'位'+placeholderTxt+'</span>'; }else if(max) { errorMsg = '<span class="error-msg">最多输入'+max+'位'+placeholderTxt+'</span>'; } }else { // 边界正确但匹配错误 errorMsg = '<span class="error-msg">'+errMsg+'</span>'; } }else { // 没有边界限定 errorMsg = '<span class="error-msg">'+errMsg+'</span>'; } if(equalTo) { var equalToVal = _this.$el.find('[name='+equalTo+']').val(); if(val !== equalToVal) { errorMsg = '<span class="error-msg">两次输入不一致,请重新输入</span>'; } } } else { // 值为空 errorMsg = '<span class="error-msg">请输入'+placeholderTxt+'</span>' } if($('.error-msg').length > 0) return; // 验证输入,显示提示信息 if(!reg.test(val) || (equalTo && val !== equalToVal)) { if($this.siblings('.error-msg').length == 0) { $this.after(errorMsg) .siblings('.error-msg') .hide() .fadeIn(); } }else { $this.siblings('.error-msg').remove(); } }) .on('focus', function () { $(this).siblings('.error-msg').remove(); }) }); }; Validator.prototype.checkAll = function () { var _this = this; if(_this.isCheckAll) { _this.$el.find('[type=submit]') .click(function () { _this.$el.find('[name]').trigger('blur'); if($('.error-msg').length > 0) { console.log('有错误信息'); return false; }else { console.log('提交成功'); _this.callback(); } }); return false; } }; Validator.prototype.init = function () { this.filterRules(); this.check(); this.checkAll(); }; $.fn.validator = function (rules, isCheckAll, callback) { var validate = new Validator(this, rules, isCheckAll, callback); return validate.init(); }; })(window, jQuery, undefined);
你可以这样使用:
var rules = [ {// 用户名 username: 'required', rule: /^[\u4e00-\u9fa5\d]{6,12}$/, message: '只支持数字loo2222' }, {// 密码 password: 'required', rule: /^("color: #800000">PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg更多关于jQuery相关内容可查看本站专题:《jQuery正则表达式用法总结》、《jQuery字符串操作技巧总结》、《jQuery操作xml技巧总结》、《jQuery扩展技巧总结》、《jquery选择器用法总结》及《jQuery常用插件及用法总结》
希望本文所述对大家jQuery程序设计有所帮助。
最新资源
- Stravinsky-Symphonies,Volume1-OrquestaSinfon
- 外媒评Switch2:向下兼容是关键 但挑战依然存在
- 任天堂提醒:宠物的尿或唾液或会让NS故障 把它放
- 《博德3》再创新高 Steam掌机总游玩时长近2000年
- 张玮伽《想你的夜DSD》东升 [WAV+CUE][1G]
- 姚璎格《 粤 24KGOLD》正版低速原抓[WAV+CUE][1
- 杨千嬅《如果大家都拥有海》寰亚 [WAV+CUE][998
- 孟庭苇.1994-1990-1994钻石精选集2CD(2022环球X
- 群星.1998-华纳好情歌精选17首【华纳】【WAV+CU
- 张敬轩王菀之.2006-903.ID.CLUB拉阔演奏厅LIVE.