verify.js 極簡表單校驗插件

這是一款極簡潔的表單校驗插件,僅50行代碼,屬於半封裝模式,可任意編寫業務邏輯代碼,核心代碼以下:git

(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;            
        }
    }    
})();

插件調用方法以下:github

(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/verifyapp

相關文章
相關標籤/搜索