摘要:這是一款極簡(jiǎn)潔的表單校驗(yàn)插件,僅行代碼,屬于半封裝模式,可任意編寫業(yè)務(wù)邏輯代碼,核心代碼如下校驗(yàn)插件判斷是否函數(shù)表單提交校驗(yàn)全部將單個(gè)事件對(duì)象追加到數(shù)組中,提交表單時(shí)遍歷執(zhí)行核心處理方法單個(gè)元素注冊(cè)失焦事件遍歷對(duì)象提交按鈕注冊(cè)事件返回集合,
這是一款極簡(jiǎn)潔的表單校驗(yàn)插件,僅50行代碼,屬于半封裝模式,可任意編寫業(yè)務(wù)邏輯代碼,核心代碼如下:
(function(){ // 校驗(yàn)插件 if(!$.fn.hasOwnProperty("verify")){ $.fn.verify = function(config) { var fields = [], item; if (!config) return; // 判斷是否函數(shù) function isFunction(obj) { return !!(obj && obj.constructor && obj.call && obj.apply); } // 表單提交校驗(yàn)(全部) 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); // 將單個(gè)input事件對(duì)象追加到數(shù)組中,提交表單時(shí)遍歷執(zhí)行 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; } }; // 單個(gè)input元素注冊(cè)失焦事件 field.on("blur", field.testValid); } // 遍歷對(duì)象 for(item in config.fields) { process(config.fields[item], item) } // 提交按鈕注冊(cè)事件 if (config.submitButton) { $(config.submitButton).click(handleSubmit); } else { this.on("submit", handleSubmit); } // 返回集合,供調(diào)用 return fields; } } })();
插件調(diào)用方法如下:
(function(){ // 注冊(cè)校驗(yàn) $("#register").verify({ fields:{ //選中名字字段,設(shè)置校驗(yàn)規(guī)則 "#register input[name="phone"]":{ //錯(cuò)誤提示信息 message:"手機(jī)號(hào)碼格式不正確,請(qǐng)重新輸入", //校驗(yàn)規(guī)則,返回布爾值,true則成功,false則失敗,可在此回調(diào)函數(shù)中插入您的業(yè)務(wù)邏輯,最終返回bool值就好,極方便 test:function(val){ var reg = /^(1[3-8][0-9])d{8}$/; return reg.test(val); } }, "#register input[name="password"]":{ message:"請(qǐng)輸入正確格式的密碼", 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; } } } }, // 錯(cuò)誤模板,設(shè)置裝載錯(cuò)誤信息的容器,插入上面設(shè)置的錯(cuò)誤提示信息 errorTemplate:function(error){ return $("" + error.message + ""); }, //校驗(yàn)成功后的回調(diào)方法,可插入校驗(yàn)成功后要執(zhí)行的邏輯代碼 success:function(){ //coding~~ } //表單提交按鈕,若未設(shè)置,則為默認(rèn)的form.submit; submitButton: "#register .submit" }); })
原本是想在插件內(nèi)封裝一些固定的表單校驗(yàn)方法,但后來(lái)發(fā)現(xiàn)各種業(yè)務(wù)需求千奇百怪,簡(jiǎn)直眾口難調(diào),固以此方式呈現(xiàn),只封裝通用的校驗(yàn)流程,業(yè)務(wù)邏輯自行穿插,美其名曰:”半封裝“,具體優(yōu)劣各位看官自行研究了,當(dāng)然,更希望您能夠分享自己的見(jiàn)解~~
下附傳送門,詳細(xì)測(cè)試demo請(qǐng)自行跳轉(zhuǎn)下載,不謝!
https://github.com/cloverso/verify
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/86013.html
摘要:今天就來(lái)介紹一下如何利用的自定義指令來(lái)開(kāi)發(fā)一個(gè)表單驗(yàn)證插件的過(guò)程。按照這種方式就能夠使用自己開(kāi)發(fā)的這個(gè)表單校驗(yàn)插件。這段時(shí)間在進(jìn)行一個(gè)新項(xiàng)目的前期搭建,新項(xiàng)目框架采用vue-cli3和typescirpt搭建。因?yàn)轫?xiàng)目比較輕量,所以基本沒(méi)有使用額外的ui組件,有時(shí)候我們需要的一些基礎(chǔ)組件我就直接自己開(kāi)發(fā)了。今天就來(lái)介紹一下如何利用vue的自定義指令directive來(lái)開(kāi)發(fā)一個(gè)表單驗(yàn)證插件的過(guò)...
摘要:一表單驗(yàn)證模塊的構(gòu)成任何表單驗(yàn)證模塊都是由配置校驗(yàn)報(bào)錯(cuò)取值這幾部分構(gòu)成的。其實(shí)我是想寫個(gè)指令來(lái)完成表單驗(yàn)證的事的。當(dāng)然表單驗(yàn)證這種是高度定制化的。 前言 前段時(shí)間,老大搭好了Vue的開(kāi)發(fā)環(huán)境,于是我們愉快地從JQ來(lái)到了Vue。這中間做的時(shí)候,在表單驗(yàn)證上做的不開(kāi)心,看到vue的插件章節(jié),感覺(jué)自己也能寫一個(gè),因此就自己開(kāi)始寫了一個(gè)表單驗(yàn)證插件va.js。 當(dāng)然為什么不找個(gè)插件呢? vu...
摘要:表單驗(yàn)證用的插件,還用到了下拉列表相關(guān)的插件。沒(méi)想到,這其中暗暗地隱藏著一個(gè)個(gè)坑。于是看了一下插件的官方文檔,它提供了兩種方法,可以在表單元素上添加,刪除校驗(yàn)規(guī)則。 表單驗(yàn)證用的jquery validation插件,還用到了下拉列表相關(guān)的插件selectize。有這樣一個(gè)功能,表單中一個(gè)下拉列表A的required屬性是根據(jù)另一個(gè)下拉列表B的選擇內(nèi)容來(lái)動(dòng)態(tài)變換的。于是想著根據(jù)B被選中...
摘要:瀏覽文檔,發(fā)現(xiàn)插件特別適合做表單校驗(yàn)出錯(cuò)的提示。因?yàn)槭沟姆浅nl繁,最近把它封住下,做成的插件。通過(guò)本插件,在標(biāo)簽中定義好校驗(yàn)正則錯(cuò)誤信息即可。點(diǎn)擊提交時(shí),如果有表單項(xiàng)目不合法,會(huì)阻止表單繼續(xù)提交。最后調(diào)整下,就實(shí)現(xiàn)了截圖的效果。 最近的項(xiàng)目,用Bootstrap比較多。瀏覽Bootstrap文檔,發(fā)現(xiàn) popover 插件特別適合做表單校驗(yàn)出錯(cuò)的提示。 因?yàn)槭沟姆浅nl繁,最近把它封住下...
摘要:柵格系統(tǒng)用于處理頁(yè)面多終端適配的問(wèn)題。它表示抓取對(duì)象以后拖放到另一個(gè)位置。目前,它是標(biāo)準(zhǔn)的一部分。精簡(jiǎn)高效的命名準(zhǔn)則方法這篇文章發(fā)布于年月日,星期日,,歸類于相關(guān)。但是不會(huì)受到包含塊的限制,可能會(huì)溢出。 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個(gè)問(wèn)題:怎樣通過(guò) CSS 簡(jiǎn)單而優(yōu)雅的實(shí)現(xiàn)水平、垂直同時(shí)居中。記得剛開(kāi)始學(xué)習(xí) CSS 的時(shí)候,看到 float 屬性不由...
閱讀 1767·2021-11-18 13:20
閱讀 1159·2021-10-11 10:59
閱讀 2994·2021-08-24 10:01
閱讀 3505·2019-08-29 14:21
閱讀 3356·2019-08-29 14:15
閱讀 3521·2019-08-26 12:23
閱讀 3348·2019-08-26 11:46
閱讀 3354·2019-08-26 11:35