vue中使用elementUI自定義校驗及點擊提交不生效問題解決辦法
前言:
本章講述的主要是對身份證號碼的校驗 及 為何校驗了但提交不生效問題。
拓展小知識:
?? 1、身份證號碼(二代18位身份證)的含義:
1?? 1-2位:代表所屬省級政府的代碼;
2?? 3-4位:代表所在的地、市級政府代碼;
3?? 5-6位:代表所在區(qū)、縣級政府代碼;
4?? 7-10位:代表身份證持有人的出生年份;
5?? 11-12位:代表身份證持有人的出生月份;
6?? 13-14位:代表身份證持有人的出生當月日期;
7?? 15-16位:代表身份證持有人在當?shù)氐捻樞虼a(所在地的派出所的代碼);
8?? 17位:代表性別,奇數(shù)表示男性,偶數(shù)表示女性;9?? 18位:代表校驗碼(校檢碼可以是0~9的數(shù)字,有時也用X表示)。
?? X是羅馬數(shù)字的10,用X來代替10,可以保證公民身份證符合國家標準。
?? 2、一代身份證和二代身份證的區(qū)別:1?? 編號位數(shù)不同,第一代身份證為15位號碼,而第二代證是18位號碼。
2?? 編碼規(guī)則不同,第一代身份證在前6位號碼后沒有完整出生年份,而二代的有完整的出生年份。
3?? 芯片存儲量不同,二代身份證采用非接觸式芯片,寫入的信息可劃分安全等級,分區(qū)存儲,容量更大。
4?? 二代增加了有效的防偽標識,將持證人的照片圖像和身份項目內(nèi)容等數(shù)字化后采用密碼技術(shù)加密,存入芯片,可以有效起到證件防偽的作用。
一、身份證號碼的校驗
?? 1、在vue文件中,寫好關(guān)于身份證的input輸入框(且要設定輸入長度限制)
注意:開啟屬性show-word-limit可以顯示字數(shù)統(tǒng)計,配合 maxlength 屬性來限制輸入長度
<el-dialog title="業(yè)主變更" :visible.sync="inLeaseVisible"> <el-form :rules="rulesY" ref="rulesTower" :model="inLeaseForm" label-width="120px" size="small"> <el-row> <el-col :span="12"> <el-form-item label="業(yè)主姓名" prop='name'> <el-input v-model="inLeaseForm.name"/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="聯(lián)系電話" prop='phone'> <el-input v-model="inLeaseForm.phone" maxlength="11" show-word-limit clearable/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="身份證" prop='idCard'> <el-input v-model="inLeaseForm.idCard" maxlength="18" show-word-limit/> </el-form-item> </el-col> <el-col :span="24" style="text-align: right;"> <el-button type="primary" size="small" @click="inLeaseSubmit">確認變更</el-button> </el-col> </el-row> </el-form> </el-dialog>
?? :visible.sync="inLeaseVisible" —— visible代表可見的,當vue中inLeaseVisible變量的值為true時,el-dialog修飾的內(nèi)容(會話窗口或者文本信息)就會在頁面中展示出來,反之是false時就會隱藏;sync 指的是同步動態(tài)雙向來表示visible的值,當我關(guān)閉窗口時,彈框就隱藏了;
?? :rules = "rulesY" —— 動態(tài)綁定校驗規(guī)則屬性
?? ref = "rulesTower" —— ref 是一個全局屬性,可用來引用(標記) 指定元素或者組件,它是唯一的,可在當前組件內(nèi)部通過 this.$refs 來訪問,也可在當前組件外部通過 vm.$refs 來訪問; ( 在Vue中,ref是一個用于訪問組件或DOM元素的屬性)
?? :model = "inLeaseForm" —— :model是v-bind:model的縮寫,主要是用于數(shù)據(jù)雙向綁定
?? prop='name' —— prop是父組件向子組件單向傳遞數(shù)據(jù),該過程是單向的(單向數(shù)據(jù)流)
傳遞的屬性可以是靜態(tài)的/動態(tài)的/數(shù)字/字符串/數(shù)組/對象。
在element官網(wǎng)中可以看到input輸入框中的輸入長度限制
?? 2、新建一個自定義身份證驗證的js文件,在js文件中寫一個身份校驗的方法,在需要身份校驗的vue組件中引入這個js文件。
/* 身份證校驗規(guī)則 lxy */ //校驗身份證號 export function idCard(idCard) { //傳入的 idCard 參數(shù)為用戶輸入的身份證號 //長度或格式校驗 var patrn = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/; //地區(qū)校驗 var aCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "內(nèi)蒙古", 21: "遼寧", 22: "吉林", 23: "黑龍江", 31: "上海", 32: "江蘇", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山東", 41: "河南", 42: "湖北", 43: "湖南", 44: "廣東", 45: "廣西", 46: "海南", 50: "重慶", 51: "四川", 52: "貴州", 53: "云南", 54: "西藏", 61: "陜西", 62: "甘肅", 63: "青海", 64: "寧夏", 65: "新疆", 71: "臺灣", 81: "香港", 82: "澳門", 91: "國外" }; // 出生日期驗證 var sBirthday = ( idCard.substr(6, 4) + "-" + Number(idCard.substr(10, 2)) + "-" + Number(idCard.substr(12, 2)) ).replace(/-/g, "/"), d = new Date(sBirthday) // 身份證號碼校驗 最后4位 包括最后一位的數(shù)字/字母X var sum = 0, weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], codes = "10X98765432"; for (var i = 0; i < idCard.length - 1; i++) { sum += idCard[i] * weights[i]; } //計算出來的最后一位身份證號碼 var last = codes[sum % 11]; //錯誤信息校驗 var errorMsg = ''; if (idCard === '') { errorMsg = "身份證號不能為空" } else if (!patrn.exec(idCard)) { errorMsg = "你輸入的身份證長度或格式錯誤" } else if (!aCity[parseInt(idCard.substr(0, 2))]) { errorMsg = "你的身份證地區(qū)非法" } else if (sBirthday != d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate()) { errorMsg = "身份證上的出生日期非法" } else if (idCard[idCard.length - 1] != last) { errorMsg = "你輸入的身份證號非法" } return errorMsg; }
?? 3、在你需要驗證身份證的文件中 引入身份證驗證的js文件
//引入身份證驗證的js文件 import {idCard} from "@/pages/room/validate.js";
?? 4、在data中定義變量,接收校驗結(jié)果
data() { //定義變量接收校驗結(jié)果 //自定義驗證表單時,切記不管什么情況都要執(zhí)行callback函數(shù)?。?! var checkIdCard = (rule, value, callback) => { var errorMsg = idCard(value); if (errorMsg != "") { callback(new Error(errorMsg)); } else { callback();// 一定要每種情況都執(zhí)行回調(diào) } } };
?? 劃重點:
? 重要的事情說三遍:切記一定要每一種情況都要執(zhí)行回調(diào) 【即 callback()】!??!
切記一定要每一種情況都要執(zhí)行回調(diào) 【即 callback()】?。。?/p>
切記一定要每一種情況都要執(zhí)行回調(diào) 【即 callback()】?。?!
?? 我自己是直接 if 判斷是否為空之后就沒有 else { callback(); } 判斷另一種情況,所以當我校驗提交按鈕時一直觸發(fā)不了,一直無效,后來才發(fā)現(xiàn)是這個問題。
?? 5、在rulesY中設置驗證規(guī)則,綁定需要校驗的屬性; checkIdCard 調(diào)用校驗返回的結(jié)果
rulesY: { phone:[ { required: true, message: '請輸入手機號', trigger: 'blur' },{ required: true, pattern: /^1[3456789]\d{9}$/, message: '手機號格式不正確', trigger: 'blur' }], //綁定需要校驗的屬性 idCard:[ //checkIdCard: 調(diào)用校驗返回結(jié)果 //定義身份證校驗規(guī)則變量 { required: true, validator: checkIdCard, trigger: 'blur' } ] },
?? 6、將校驗規(guī)則封裝后,再調(diào)用方法進行校驗
// 業(yè)主確認變更 inLeaseSubmit() { this.$refs.rulesTower.validate((valid)=>{ if(valid){ //alert("success!"); API.getRoomData('post', '/api/ctyLodgerInfo/hendersonGroup/adminIn', this.inLeaseForm).then(res => { if (res.data.code == 0) { this.inLeaseForm = {} this.inLeaseVisible = false this.$message.success(res.data.msg) } else { this.$message.warning(res.data.msg) } }); } else { console.log("error?。?!"); return false; } }); },
效果展示:
二、 為何校驗了但提交不生效問題
?? 劃重點:
?? 總結(jié)以下幾個問題:
?? 1、在data中定義變量接收校驗結(jié)果時,未執(zhí)行回調(diào);
切記一定要每一種情況都要執(zhí)行回調(diào) 【即 callback()】!??!
?? 2、表單引用名稱不正確。在表單上添加 ref 屬性時,需確保名稱和使用 this.$refs時的名稱一致,不然無法獲取到表單引用對象;
?? 3、表單對象不存在 validate 方法 ;
?? 4、綁定事件不正確。在表單組件上綁定提交事件時,需確保@click='xxx'事件已正確綁定到表單組件上,并使用了正確的方法名;
?? 5、表單驗證規(guī)則未設置。若沒有為表單設置驗證規(guī)則,則無法進行驗證,而此時調(diào)用 validate 方法也會失效。需為表單設置 rules 屬性,并設置相應的驗證規(guī)則。
總結(jié)
到此這篇關(guān)于vue中使用elementUI自定義校驗及點擊提交不生效問題解決辦法的文章就介紹到這了,更多相關(guān)elementUI自定義校驗及點擊提交不生效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue?使用?ElementUi?el-upload?手動上傳文件限制上傳文件類型大小同名等進行限制
- vue使用elementUI組件實現(xiàn)分頁效果
- Vue3項目中引入ElementUI并使用的示例詳解
- Vue?ElementUI在el-table中使用el-popover問題
- vue?elementUi中的tabs標簽頁使用教程
- vue3項目如何使用樣式穿透修改elementUI默認樣式
- Vue使用ElementUI動態(tài)修改table單元格背景顏色或文本顏色
- vue elementui表格獲取某行數(shù)據(jù)(slot-scope和selection-change方法使用)
- VUE-ElementUI?時間區(qū)間選擇器的使用
- Vue引入ElementUI并使用的詳細過程
相關(guān)文章
vue?elementUI之this.$confirm的使用方式
這篇文章主要介紹了vue?elementUI之this.$confirm的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08vue2.0+vue-dplayer實現(xiàn)hls播放的示例
這篇文章主要介紹了vue2.0+vue-dplayer實現(xiàn)hls播放的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03vue-router(this.$router)如何在新窗口打開路由跳轉(zhuǎn)頁面
這篇文章主要介紹了vue-router(this.$router)如何在新窗口打開路由跳轉(zhuǎn)頁面問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12vue.js 1.x與2.0中js實時監(jiān)聽input值的變化
這篇文章主要介紹了vue.js 1.x與vue.js2.0中js實時監(jiān)聽input值的變化的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03Vue 基礎(chǔ)語法之計算屬性(computed)、偵聽器(watch)、過濾器(filters)詳解
計算屬性就是 Vue 實例選項中的 computed,computed 的值是一個對象類型,對象中的屬性值為函數(shù),而且這個函數(shù)沒辦法接收參數(shù),這篇文章主要介紹了Vue 基礎(chǔ)語法之計算屬性(computed)、偵聽器(watch)、過濾器(filters)詳解,需要的朋友可以參考下2022-11-11詳解vue.js數(shù)據(jù)傳遞以及數(shù)據(jù)分發(fā)slot
本篇文章給大家通過代碼實例分析了vue.js數(shù)據(jù)傳遞以及數(shù)據(jù)分發(fā)slot的相關(guān)知識,有這方面興趣的朋友參考下吧。2018-01-01