DDR爱好者之家 Design By 杰米
本文实例为大家分享了封装jquery简易验证插件的具体代码,供大家参考,具体内容如下
html代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery数据校验插件开发</title> <link rel="stylesheet" href="css/register.css" /> <link rel="stylesheet" href="css/validate.css" /> </head> <body> <main> <section> <form method="post" action="result.html" ac id="register"> <div class="register-wrap"> <div class="register"> <ul> <li> <label for="username">用户名:</label> <input type="text" id="username" name="username" tabindex="1" class="format-input" placeholder="请输入用户名" data-vt-required-msg="用户名不能为空" data-vt-regexp-msg="用户名必须是以字母、数字、下划线组成,且不能以数字开头(6-20位)" data-vt-required=true data-vt-regexp='^[\w_]\w{5,19}$' autofocus> </li> <li> <label for="pwd">密码:</label> <input type="password" id="pwd" name="password" tabindex="2" class="format-input" placeholder="请输入密码" data-vt-required=true data-vt-regexp="^[a-zA-Z_][\w_]{5,11}$" data-vt-required-msg="密码不能为空" data-vt-regexp-msg="密码必须是由字母、数字、下划线组成,且不能以数字开头(6-12位)" > </li> <li> <label for="confirmPwd">确认密码:</label> <input type="password" id="confirmPwd" name="password" tabindex="3" class="format-input" placeholder="请再次输入密码" data-vt-required=true data-vt-required-msg="密码不能为空" data-vt-equals=true data-vt-equals-msg="两次密码不一致"> </li> <li> <label for="phone">手机号:</label> <input type="text" id="phone" name="phone" tabindex="4" class="format-input" placeholder="请输入手机号" data-vt-required=true data-vt-phone=true data-vt-required-msg="手机号不能为空" data-vt-phone-msg="手机号不合法"> </li> <li> <label for="tel">座机:</label> <input type="text" id="tel" name="tel" tabindex="5" class="format-input" placeholder="请输入座机号码" data-vt-required=true data-vt-tel=true data-vt-required-msg="座机号不能为空" data-vt-tel-msg="座机号不合法"> </li> <li> <label for="email">邮箱:</label> <input type="text" id="email" name="email" tabindex="6" class="format-input" placeholder="请输入邮箱地址" data-vt-required=true data-vt-email=true data-vt-required-msg="邮箱不能为空" data-vt-email-msg="邮箱不合法" > </li> <li> <label for="submitBtn"></label> <input type="submit" value="注册" id="submitBtn" tabindex="7" class="format-input submit-btn"> </li> </ul> </div> </div> </form> </section> </main> <script src="/UploadFiles/2021-04-02/jquery2.0.js">css部分
* { margin: 0; padding: 0; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; } ul li { list-style: none; position: relative; } input { outline: 0; } .format-input { display: inline-block; width: 84%; height: 35px; padding: 0 0 0 3px; border: 1px solid #fff; vertical-align: baseline; } :focus { outline: 4px solid #007fff; } html, body { width: 100%; height: 100%; } body { min-height: 100%; font: 12px/1.5 'Microsoft YaHei', arial, sans-serif; background: url(../image/bj.jpg) no-repeat; background-size: cover; overflow: hidden; } .register-wrap { position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 450px; height: 415px; margin: auto; background: rgba(0, 0, 0, 0.5); } .register { width: 100%; height: 100%; padding: 20px 30px; color: #fff; } .register > ul > li { font-size: 0; margin: 0 0 20px 0; } .register > ul > li label { display: inline-block; width: 16%; font-size: 12px; } .submit-btn { border: 1px solid transparent; font-size: 18px; font-weight: bold; color: #fff; background: #51a8ff; box-shadow: 1px 1px #AFC4EA, 2px 2px #AFC4EA, 3px 3px #AFC4EA; } .submit-btn:hover { cursor: pointer; } .submit-btn:focus { outline: none; border: 1px solid #f0f3f9; } .submit-btn:active { border: 1px solid #f0f3f9; transform: translate(1px, 1px); box-shadow: 1px 1px #AFC4EA, 2px 2px #AFC4EA; }提示错误的tips样式:
.validate-error-tip { position: absolute; top: 0; left: 0; display: table; min-width: 150px; min-height: 35px; font-size: 12px; border: 1px solid lightblue; padding: 5px; background: #fff; color: #666; z-index: 9999; } .validate-error-tip:before { position: absolute; top: 0; left: -15px; display: block; content: ''; width: 0; height: 0; border-color: transparent lightblue transparent transparent; /*1、下边框有颜色 对应着上边框没有宽度,是正三角形;2、上边框有颜色 对应着下边框没宽度,是倒三角形*/ border-style: solid; border-width: 15px 15px 15px 0; }javascript部分:
(function($, factory, pluginName) { factory($, pluginName); })(jQuery, function($, pluginName){ //插件默认配置项 var __DEFAULT__ = { //默认触发验证的事件为input事件 initEvent: 'input', prefix: 'vt' //自定义属性前缀 }; //插件内部编写校验规则 var __RULES__ = { //正则 regexp: function(ruleData) { return new RegExp(ruleData).test(this.val()); }, //必填项 required: function(ruleData) { return $.trim(this.val()).length > 0; }, //最小值 minLength: function(ruleData) { return $.trim(this.val()).length > ruleData ; }, //最大值 maxLength: function(ruleData) { return $.trim(this.val()).length < ruleData; }, //验证两次密码是否一致 isEquals: function(ruleData) { var pwd = $(':password').eq(0); //$(':password')[0]是什么对象呢? return pwd.val() === this.val(); }, //是否是邮箱 isEmail: function(ruleData) { return /\w+@\w+\..+/g.test(this.val()); }, //是不是手机号 isPhone: function(ruleData) { return /^1\d{10}$/g.test(this.val()); }, //是不是座机号码 isTel: function(ruleData) { return /^0\d{2,3}-\d{7,8}$/g.test(this.val()); } }; $.fn[pluginName] = function(options) { //标识是否提交表单 var $this = this; if(!$this.is('form')) { return; } //this: 这里的this是jQuery实例对象 $this.$file = $this.find('input:not([type="button"][type="submit"])'); //给当前实例对象(也就是调用该插件的jquery对象)添加一个$file的属性 $.extend($this, __DEFAULT__, options); //以默认配置为优先,以用户配置为覆盖 //格式化rule规则。 // 将一个字符串在每一个大写字母前加上一个'-',并且全部转为小写 // vtEmailMsg > vt-email-msg $this.formatRule = function(str, connector) { if(typeof str !== 'string') { return str; } //使用replace、正则(匹配单个大写字母) str = str.replace(/[A-Z]/g,function(match, index) { if(index === 0) { return match.toLowerCase() } return connector + match.toLowerCase(); }); return str; }; //显示错误信息 $this.showErrorTip = function(errorMsg) { var $tip = $("<div class='validate-error-tip'> </div>"), offset = this.position(), elHeight = this.outerHeight(), elWidth = this.outerWidth(); if(this.siblings('.validate-error-tip').length > 0){ this.siblings('.validate-error-tip').eq(0).text(errorMsg).show(); } else { $tip.text(errorMsg). css({ top: offset.top, left: offset.left + elWidth + 15, width: $tip.width() }); this.after($tip); $tip.show(); } }; //监听form表单里所有的input的事件 $this.$file.on(this.initEvent, function(){ var $input = $(this); //清除错误提示框 $input.siblings('.validate-error-tip').remove(); //注意这里是循环的我们插件的规则,而不是用户拥有的规则 $.each(__RULES__, function(key, fn) { var rule = '', errorMsg = ''; //如果key是以is字符开头、则去掉is if(key.indexOf('is') === 0) { key = key.slice(2); } key = $this.formatRule(key, '-'); //将规则格式化为html中书写的形式 rule = $input.data(__DEFAULT__.prefix + '-' + key); //获取规则的值 errorMsg = $input.data(__DEFAULT__.prefix + '-' + key + '-msg'); //规则对应的提示信息 //如果当前input有这个规则,则执行这个规则 if(rule) { //执行规则测试是否通过 var isPassed = fn.call($input, rule); //改变规则函数fn执行时候的this,指向当前input jquery对象 if(!isPassed) { //未通过、则错误提示 $this.showErrorTip.call($input, errorMsg); } } }); }); //绑定提交表单的事件 this.on('submit', function(e) { var isFormPassed = true; $this.$file.trigger($this.initEvent); $this.$file.each(function(index, current){ var $current = $(current); if($current.siblings('.validate-error-tip').is(':visible')){ isFormPassed = false; return false; } }); if(!isFormPassed) { return isFormPassed; } }); }; //扩展新的验证规则(实际上就是扩展上面__RULES__对象) $.fn[pluginName].addRule = function(options) { $.extend(__RULES__, options); } }, 'formValidate');更多内容请参考《jquery表单验证大全》 ,欢迎大家学习阅读。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月24日
2024年11月24日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]