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)文章
Layui事件監(jiān)聽(tīng)的實(shí)現(xiàn)(表單和數(shù)據(jù)表格)
這篇文章主要介紹了Layui事件監(jiān)聽(tīng)的實(shí)現(xiàn)(表單和數(shù)據(jù)表格),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
JavaScript實(shí)現(xiàn)單擊下拉框選擇直接跳轉(zhuǎn)頁(yè)面的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)單擊下拉框選擇直接跳轉(zhuǎn)頁(yè)面的方法,涉及javascript控制頁(yè)面跳轉(zhuǎn)的相關(guān)技巧,需要的朋友可以參考下2015-07-07
小程序如何獲取多個(gè)formId實(shí)現(xiàn)詳解
這篇文章主要介紹了小程序如何獲取多個(gè)formId實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
laydate只顯示時(shí)分 不顯示秒的功能實(shí)現(xiàn)方法
今天小編就為大家分享一篇laydate只顯示時(shí)分 不顯示秒的功能實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09

