這是一款極簡潔的表單校驗插件,僅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