JavaScript表單驗(yàn)證實(shí)現(xiàn)過(guò)程詳解
一. 作用
如果沒(méi)有表單驗(yàn)證,錯(cuò)誤的數(shù)據(jù)就會(huì)發(fā)往服務(wù)端,會(huì)造成服務(wù)端壓力過(guò)大;
所以在前端對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,以減輕服務(wù)端壓力;
二. 需求
1. 當(dāng)輸入框失去焦點(diǎn)時(shí),驗(yàn)證輸入內(nèi)容是否符合要求-----onblur
當(dāng)用戶(hù)名符合要求后,要隱藏提示信息?。╠isplay=”none”)
2. 點(diǎn)擊注冊(cè)按鈕時(shí),判斷所有輸入框的內(nèi)容是否符合要求,如果不符合則阻住表單提交–onsubmit
三. 實(shí)現(xiàn)
需求一:
HTML:
action=# 即提交到當(dāng)前頁(yè)面,表單提交的方式是 get;
style="display:none"
會(huì)隱藏提示信息,所以當(dāng)用戶(hù)名密碼不符合要求時(shí),只需要修改 display屬性即可讓提示信息分情況顯示;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注冊(cè)頁(yè)面</title> </head> <!-- css添加背景圖片--> <style> body{ background-image: url("3.jpg"); background-repeat:no-repeat; } </style> <body> <h2> 歡迎注冊(cè)! </h2> <!--表單--> <form id="reg-from" action="#" method="get"> <table> <tr> <td class="inputs">用戶(hù)名:</td> <td> <input name="username" type="text" id="username"> <br> <!-- 錯(cuò)誤提示信息 --> <span id="username_err" class="err_msg" style="display:none">用戶(hù)名不合法</span> <!-- 未來(lái)通過(guò)更改span的display屬性來(lái)控制提示信息 --> </td> </tr> <tr> <td>密碼:</td> <td class="inputs"> <input name="password" type="password" id="password"> <br> <!-- 錯(cuò)誤提示信息 --> <span id="password_err" class="err_msg" style="display:none">密碼不合法</span> </td> </tr> </table> <br> <input type="submit" name="submit" value="提交注冊(cè)"> </form> <!-- 外連script! --> <script src="testing.js"></script> </body> </html>
注意:
外連script 要放在后面,否則無(wú)法提前獲取到Element對(duì)象,就無(wú)法更改display屬性;
JavaScript:
1.主要思路就是根據(jù)id 獲取到Element對(duì)象,
2.然后使用對(duì)象的 onblur
事件 綁定 函數(shù),
3.在函數(shù)內(nèi)進(jìn)行判斷,并更改Element對(duì)象的display屬性;
// 1.驗(yàn)證用戶(hù)名是否合理 // 1.1 根據(jù)id 獲取用戶(hù)名的輸入框的Element對(duì)象 var username=document.getElementById("username"); // 1.2 綁定Element對(duì)象的onblur屬性! 設(shè)置鼠標(biāo)失去焦點(diǎn)時(shí) 要發(fā)生的事件 username.onblur=function(){ // 1.3 獲取用戶(hù)的輸入名(Element對(duì)象的value屬性) let usernameInput=username.value.trim(); //去掉空格 // 1.4 判斷用戶(hù)名是否是6~12位 if(usernameInput.length>=6 && usernameInput.length<=12){ // 用戶(hù)更改username后,符合規(guī)則時(shí)將display屬性置為null document.getElementById("username_err").style.display="none"; }else{ //不符合則修改 span標(biāo)簽中的style="display"屬性為空字符串即可顯示提示信息! document.getElementById("username_err").style.display=''; } } // 使用 Ctrl+r 替換username為password // 2.驗(yàn)證密碼是否合理 //2.1 根據(jù)id 獲取密碼的輸入框?qū)ο? var passwordObj=document.getElementById("password"); // 2.2 綁定對(duì)象的onblur屬性! 設(shè)置鼠標(biāo)失去焦點(diǎn)時(shí) 要發(fā)生的事件 passwordObj.onblur=function(){ // 2.3 獲取用戶(hù)的輸入密碼 var passwordInput=passwordObj.value.trim();// input中value就是用戶(hù)的輸入,trim()去掉空格 // 2.4 判斷密碼是否是6~12位 if(passwordInput.length>=6 && passwordInput.length<=12){ //password,符合規(guī)則時(shí)將display屬性置為null document.getElementById("password_err").style.display="none"; }else{ //不符合,則修改 span標(biāo)簽中的style="display"屬性為空字符串即可顯示 ! document.getElementById("password_err").style.display=""; }
運(yùn)行效果:
需求二:
函數(shù)的邏輯是:
用戶(hù)名和密碼同時(shí)滿(mǎn)足則返回true 即可以提交,否則返回false 不能提交信息到服務(wù)端!
需要改造需求一中的方法,將匿名函數(shù)改為單獨(dú)的函數(shù),并在表單驗(yàn)證時(shí)調(diào)用;
JavaScript:
更改用戶(hù)名和密碼部分:
// 1.驗(yàn)證用戶(hù)名是否合理 // 1.1 根據(jù)id 獲取用戶(hù)名的輸入框?qū)ο? var usernameObj=document.getElementById("username"); // 1.2 綁定對(duì)象的onblur屬性! 設(shè)置鼠標(biāo)失去焦點(diǎn)時(shí) 要發(fā)生的事件 usernameObj.onblur=checkUsername; // js函數(shù)名是一個(gè)引用,不加小括號(hào)相當(dāng)于屬性賦給引用,不會(huì)立即調(diào)用 function checkUsername(){ // 獲取用戶(hù)的輸入名 let usernameInput=usernameObj.value.trim();// input中value就是用戶(hù)的輸入,trim()去掉空格 //判斷 是否是6~12位 //提出判斷的結(jié)果為一個(gè)變量flag let flag=usernameInput.length>=6 && usernameInput.length<=12; if(flag){ // 符合 // 如果后續(xù)更改為符合要求的用戶(hù)名,則要隱藏提示信息! document.getElementById("username_err").style.display="none"; }else{ //不符合,則修改 span標(biāo)簽中的style="display"屬性為空字符串即可顯示 ! document.getElementById("username_err").style.display=""; } return flag; // 返回值便于給onsubmit使用 } // 使用 Ctrl+r 替換username為password // 2.驗(yàn)證密碼是否合理 //2.1 根據(jù)id 獲取密碼的輸入框?qū)ο? var passwordObj=document.getElementById("password"); // 2.2 綁定對(duì)象的onblur屬性! 設(shè)置鼠標(biāo)失去焦點(diǎn)時(shí) 要發(fā)生的事件 passwordObj.onblur=checkPassword; function checkPassword(){ // 獲取用戶(hù)的輸入密碼 let passwordInput=passwordObj.value.trim();// input中value就是用戶(hù)的輸入,trim()去掉空格 //判斷 是否是6~12位 let flag=passwordInput.length>=6 && passwordInput.length<=12; if(flag){ // 符合 // 如果后續(xù)更改為符合要求的密碼,則要隱藏提示信息! document.getElementById("password_err").style.display="none"; }else{ //不符合,則修改 span標(biāo)簽中的style="display"屬性為空字符串即可顯示 ! document.getElementById("password_err").style.display=""; } return flag; }
表單驗(yàn)證!
// 表單驗(yàn)證 // 1.獲取form表單的對(duì)象,而不是 submit的對(duì)象! var regFormObj=document.getElementById("reg-form"); // 2.綁定對(duì)象的onsubmit屬性,返回false則阻止提交 regFormObj.onsubmit=function(){ // 逐個(gè)判斷表單項(xiàng)是否符合要求,有一個(gè)不符合則返回false // 讓之前單獨(dú)判斷用戶(hù)名/密碼的 funtion可以被調(diào)用,且有返回值 let flag=checkUsername() && checkPassword(); if(!flag){ alert("無(wú)法提交,請(qǐng)修改"); } // 都滿(mǎn)足則返回給unsubmit為true; 有一個(gè)不滿(mǎn)足就返回false return flag; }
運(yùn)行效果:
如果用戶(hù)名和密碼任一不滿(mǎn)足要求將無(wú)法提交:
更改后,用戶(hù)名密碼隨著url被提交(method=get):
注意:
- 要綁定onsubmit對(duì)象,要獲取的是整個(gè)form 表單的Element對(duì)象,而不是 submit的對(duì)象!
- 方法后面不加括號(hào) 是函數(shù)對(duì)象,加()是函數(shù)結(jié)果!
到此這篇關(guān)于JavaScript表單驗(yàn)證實(shí)現(xiàn)過(guò)程詳解的文章就介紹到這了,更多相關(guān)JS表單驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript數(shù)組及常見(jiàn)操作方法小結(jié)
這篇文章主要介紹了JavaScript數(shù)組及常見(jiàn)操作方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript數(shù)組的基本獲取、添加、刪除、排序、翻轉(zhuǎn)等相關(guān)操作技巧,需要的朋友可以參考下2019-11-11走進(jìn)javascript——不起眼的基礎(chǔ),值和分號(hào)
本文主要介紹了javascript的基礎(chǔ)知識(shí)--值和分號(hào),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02JS常用的幾種數(shù)組遍歷方式以及性能分析對(duì)比實(shí)例詳解
這篇文章主要介紹了JS常用的幾種數(shù)組遍歷方式以及性能分析對(duì)比,結(jié)合實(shí)例形式詳細(xì)分析了javascript針對(duì)數(shù)組遍歷的幾種常見(jiàn)使用方法及執(zhí)行效率對(duì)比,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04微信小程序input、textarea層級(jí)過(guò)高穿透的問(wèn)題解決
微信小程序原生組件camera、canvas、input、live-player、live、pusher、map、textarea、video的層級(jí)是最高的,那么如何解決微信小程序input、textarea層級(jí)過(guò)高穿透,本文就詳細(xì)的介紹一下2021-11-11layui 中select下拉change事件失效的解決方法
今天小編就為大家分享一篇layui 中select下拉change事件失效的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JavaScript實(shí)現(xiàn)請(qǐng)求服務(wù)端接口方法詳解
這篇文章主要介紹了JavaScript實(shí)現(xiàn)請(qǐng)求服務(wù)端接口方法,JavaScript?中請(qǐng)求服務(wù)端接口的代碼實(shí)現(xiàn)可能會(huì)因?yàn)槭褂玫姆椒ǘ兴煌?,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01上傳文件返回的json數(shù)據(jù)會(huì)被提示下載問(wèn)題解決方案
這篇文章主要介紹了項(xiàng)目中python+js實(shí)現(xiàn)的上傳文件返回的json數(shù)據(jù)會(huì)被提示下載問(wèn)題解決方案,需要的朋友可以參考下2014-12-12js實(shí)現(xiàn)人民幣大寫(xiě)金額形式轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)人民幣大寫(xiě)金額形式轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2016-04-04JS完整獲取IE瀏覽器信息包括類(lèi)型、版本、語(yǔ)言等等
這篇文章主要介紹了JS如何完整獲取IE瀏覽器信息包括類(lèi)型、版本、語(yǔ)言等等,需要的朋友可以參考下2014-05-05