博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
verify.js 极简表单校验插件
阅读量:7126 次
发布时间:2019-06-28

本文共 3746 字,大约阅读时间需要 12 分钟。

这是一款极简洁的表单校验插件,仅50行代码,属于半封装模式,可任意编写业务逻辑代码,核心代码如下:

(function(){    // 校验插件    if(!$.fn.hasOwnProperty('verify')){        $.fn.verify = function(config) {            var fields = [], item;            if (!config) return;            // 判断是否函数            function isFunction(obj) {                return !!(obj && obj.constructor && obj.call && obj.apply);            }            // 表单提交校验(全部)            function handleSubmit() {                var  i, errors = false, len = fields.length;                for (i = 0; i < len; i++) {                    if (!fields[i].testValid()) errors = true;                }                if (errors) return false;                if (isFunction(config.success)) return config.success();            }            function process(opts, selector) {                var field = $(selector),                    error = {message: opts.message || ''},                    errorEl = config.errorTemplate(error);                // 将单个input事件对象追加到数组中,提交表单时遍历执行                                    fields.push(field);                // 核心处理方法                field.testValid = function testValid() {                    var temp, error, el = $(this), val = el.val();                    error = !opts.test(val);                    if (error) {                        el.after(errorEl);                        return false;                    } else {                        temp = errorEl.get(0);                        temp.parentNode && temp.parentNode.removeChild(temp);                        return true;                    }                };                // 单个input元素注册失焦事件                field.on('blur', field.testValid);            }            // 遍历对象            for(item in config.fields) {                process(config.fields[item], item)            }            // 提交按钮注册事件            if (config.submitButton) {                $(config.submitButton).click(handleSubmit);            } else {                this.on('submit', handleSubmit);            }            // 返回集合,供调用            return fields;                    }    }    })();

插件调用方法如下:

(function(){    // 注册校验    $('#register').verify({        fields:{            //选中名字字段,设置校验规则            '#register input[name="phone"]':{                //错误提示信息                message:'手机号码格式不正确,请重新输入',                //校验规则,返回布尔值,true则成功,false则失败,可在此回调函数中插入您的业务逻辑,最终返回bool值就好,极方便                test:function(val){                    var reg = /^(1[3-8][0-9])\d{8}$/;                    return reg.test(val);                }            },            '#register input[name="password"]':{                message:'请输入正确格式的密码',                test: function (val) {                    if (!val) return false;                    var reg = /^[a-zA-Z0-9]{6,20}$/;                    return reg.test(val);                }            },            '#register input[name="repassword"]':{                message:'两次密码输入不一致!',                test:function(val){                    var password = $('input[name="password"]').val();                    if(password != val) {                        return false;                    } else {                        return true;                    }                }            }                                    },        // 错误模板,设置装载错误信息的容器,插入上面设置的错误提示信息        errorTemplate:function(error){                        return $('
' + error.message + '
'); }, //校验成功后的回调方法,可插入校验成功后要执行的逻辑代码 success:function(){ //coding~~ } //表单提交按钮,若未设置,则为默认的form.submit; submitButton: '#register .submit' }); })

原本是想在插件内封装一些固定的表单校验方法,但后来发现各种业务需求千奇百怪,简直众口难调,固以此方式呈现,只封装通用的校验流程,业务逻辑自行穿插,美其名曰:”半封装“,具体优劣各位看官自行研究了,当然,更希望您能够分享自己的见解~~

下附传送门,详细测试demo请自行跳转下载,不谢!

转载地址:http://zoeel.baihongyu.com/

你可能感兴趣的文章
ELK之搜索引擎介绍(一)
查看>>
一键 安装lamp+lnmp+ftp+Tomcat任意选择5分钟起飞
查看>>
DNS服务器原理以及搭建主-辅DNS服务器操作指南
查看>>
linux基础命令 cat
查看>>
9.5 18.1-18.5
查看>>
Http常用状态码
查看>>
linux一天一个脚印:进程的管理
查看>>
波音是在自掘死路吗?
查看>>
F5学习——Part 2(F5中的基本元素和standard和Perfomance L4之间的区别)
查看>>
如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示
查看>>
以太网络--学习笔记(课外)
查看>>
黑五来临之际,亚马逊客户邮箱地址遭到泄露
查看>>
Linux第一周学习笔记(11)
查看>>
运维之k8s集群搭建
查看>>
老生常谈Java虚拟机垃圾回收机制(必看篇)
查看>>
OpenStake架构-----nova组件(二)
查看>>
三剑客-awk
查看>>
短消息调试笔记
查看>>
C++ const用法 尽可能使用const
查看>>
C语言的传值与传址调用
查看>>