verify.js 极简表单校验插件

这是一款极简约的表单校验插件,仅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 $('<div class="wrong">' + error.message + '</div>');
        },
        //校验胜利后的回调要领,可插进去校验胜利后要实行的逻辑代码
        success:function(){
            //coding~~
        }        
        //表单提交按钮,若未设置,则为默许的form.submit;
        submitButton: '#register .submit'   
    });          
})

原本是想在插件内封装一些牢固的表单校验要领,但厥后发明种种营业需求光怪陆离,几乎众口难调,固以此体式格局显现,只封装通用的校验流程,营业逻辑自行交叉,美其名曰:”半封装“,细致好坏列位看官自行研讨了,固然,更愿望您可以分享本身的看法~~

下附传送门,细致测试demo请自行跳转下载,不谢!
https://github.com/cloverso/verify

    原文作者:肆恭弘=叶 恭弘
    原文地址: https://segmentfault.com/a/1190000003769345
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞