手動(dòng)實(shí)現(xiàn)js短信驗(yàn)證碼輸入框
前言
本文記錄一下自己手動(dòng)實(shí)現(xiàn)的一個(gè)前端常見(jiàn)的短信驗(yàn)證碼輸入組件,從需求到實(shí)現(xiàn)逐步優(yōu)化的過(guò)程。
正文
1.需求分析
首先看一下效果圖。
首先頁(yè)面加載的時(shí)候,輸入框獲取焦點(diǎn),當(dāng)用戶輸入一個(gè)數(shù)字后,焦點(diǎn)自動(dòng)跳轉(zhuǎn)到第二個(gè)框,當(dāng)四個(gè)框全部輸入后,模擬發(fā)送提交請(qǐng)求,這里用一個(gè)彈框提示,輸出輸入的驗(yàn)證碼內(nèi)容。主流程之外的需求: 輸入框內(nèi)只能輸入數(shù)字類型,不能輸入字母,若強(qiáng)制輸入非數(shù)字類型按下撤回鍵時(shí)候輸入的驗(yàn)證碼置空并且把當(dāng)前焦點(diǎn)跳轉(zhuǎn)至第一個(gè)輸入框。
2.完整代碼實(shí)現(xiàn)。
大致思路就是頁(yè)面加載的時(shí)候,給第一個(gè)輸入框添加 autofocus 屬性,讓其自動(dòng)獲取焦點(diǎn),然后監(jiān)聽(tīng)鍵盤(pán)點(diǎn)擊事件,當(dāng)鍵盤(pán)按下的時(shí)候,判斷當(dāng)前按鍵是否是數(shù)字按鍵,若不是,則當(dāng)前輸入框置空,焦點(diǎn)還在當(dāng)前輸入框,若為數(shù)字,則判斷前面的輸入框是否有數(shù)字存在,若不存在,則把焦點(diǎn)跳轉(zhuǎn)到前面空的一個(gè)輸入框,否則當(dāng)前輸入框輸入,并且焦點(diǎn)移至下一個(gè)輸入框,焦點(diǎn)通過(guò)輸入框的一個(gè)偽類實(shí)現(xiàn),當(dāng)輸入長(zhǎng)度為為4時(shí)候,將每個(gè)輸入框數(shù)字拼接成字符串通過(guò)彈框提示。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.check-div {
width: 400px;
height: 600px;
margin: 100px auto;
border: 1px solid slategrey;
text-align: center;
}
h1 {
font-size: 24px;
}
.input-div {
margin-top: 100px;
}
input {
margin-left: 5px;
text-align: center;
width: 50px;
height: 50px;
border: none;
/* 這里注意修改默認(rèn)外邊框?qū)傩?不用border*/
outline: 1px solid black;
}
input:focus {
outline: 2px solid #3494fe;
}
</style>
</head>
<body>
<div class="check-div">
<h1>請(qǐng)輸入驗(yàn)證碼</h1>
<div class="input-div">
<input
type="text"
class="inputItem0"
data-index="0"
maxlength="1"
autofocus
/>
<input type="text" class="inputItem1" data-index="1" maxlength="1" />
<input type="text" class="inputItem2" data-index="2" maxlength="1" />
<input type="text" class="inputItem3" data-index="3" maxlength="1" />
</div>
</div>
<script>
var inputArr = document.getElementsByTagName("input");
window.addEventListener("keyup", (e) => {
let curIndex = e.target.getAttribute("data-index"); //獲取當(dāng)前輸入的下標(biāo)
//如果點(diǎn)擊BackSpace刪除 這里刪除全部
if (e && e.keyCode == 8) {
console.log(22222222222);
for (let j = 0; j <= 3; j++) {
inputArr[j].value = "";
inputArr[0].focus();
}
return;
}
console.log("e.keyCode", e.keyCode);
//如果輸入的不是數(shù)字
if (!(e.keyCode >= 48 && e.keyCode <= 57)) {
console.log(1111111111);
inputArr[curIndex].value = "";
return false;
}
//遍歷數(shù)組的值拼接成驗(yàn)證碼字符串
var str = "";
for (let j = 0; j <= 3; j++) {
console.log(inputArr[j].value);
str += inputArr[j].value;
}
var nextIndex = Number(curIndex) + 1;
//判斷沒(méi)有屬夠四位驗(yàn)證碼的時(shí)候
if (curIndex < 3 && str.length < 4) {
for (let i = 0; i <= curIndex; i++) {
// 判斷之前的是否有空即沒(méi)輸入的情況,存在則把焦點(diǎn)調(diào)整到前面,并且把輸入的后面給到最前面的一位,否則跳到下一位
if (!inputArr[i].value) {
inputArr[curIndex].blur();
inputArr[i].value = inputArr[curIndex].value;
var index = i + 1;
inputArr[index].focus();
inputArr[curIndex].value = "";
return;
} else {
var nextIndex = Number(curIndex) + 1;
inputArr[nextIndex].focus();
}
}
} else {
alert("提交的驗(yàn)證碼是" + str);
//輸入了四位驗(yàn)證碼的時(shí)候可以發(fā)送驗(yàn)證碼請(qǐng)求等等
}
});
</script>
</body>
</html>
總結(jié)
到此這篇關(guān)于手動(dòng)實(shí)現(xiàn)js短信驗(yàn)證碼輸入框的文章就介紹到這了,更多相關(guān)js短信驗(yàn)證碼輸入框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- javascript發(fā)送短信驗(yàn)證碼實(shí)現(xiàn)代碼
- JS實(shí)現(xiàn)簡(jiǎn)單短信驗(yàn)證碼界面
- 基于JavaScript短信驗(yàn)證碼如何實(shí)現(xiàn)
- JS短信驗(yàn)證碼倒計(jì)時(shí)功能的實(shí)現(xiàn)(沒(méi)有驗(yàn)證碼,只有倒計(jì)時(shí))
- JS獲取短信驗(yàn)證碼倒計(jì)時(shí)的實(shí)現(xiàn)代碼
- JavaScript獲取短信驗(yàn)證碼(周期性)
- JS實(shí)現(xiàn)短信驗(yàn)證碼一鍵登錄功能
- javascript實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼案例
- 使用JavaScript實(shí)現(xiàn)前端短信驗(yàn)證碼獲取功能全過(guò)程
相關(guān)文章
實(shí)用又漂亮的BootstrapValidator表單驗(yàn)證插件
這篇文章主要為大家詳細(xì)介紹了好用又漂亮的BootstrapValidator表單驗(yàn)證插件,感興趣的小伙伴們可以參考一下2016-05-05
微信小程序網(wǎng)絡(luò)請(qǐng)求的封裝與填坑之路
本文主要介紹了關(guān)于小程序網(wǎng)絡(luò)請(qǐng)求的封裝的相關(guān)資料。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
javascript+HTML5 canvas繪制時(shí)鐘功能示例
這篇文章主要介紹了javascript+HTML5 canvas繪制時(shí)鐘功能,結(jié)合實(shí)例形式分析了javascript+HTML5 canvas數(shù)值運(yùn)算、圖形繪制與時(shí)間顯示相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
BootStrap創(chuàng)建響應(yīng)式導(dǎo)航條實(shí)例代碼
這篇文章主要介紹了BootStrap創(chuàng)建響應(yīng)式導(dǎo)航條實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-05-05
ES5 模擬 ES6 的 Symbol 實(shí)現(xiàn)私有成員功能示例
這篇文章主要介紹了ES5 模擬 ES6 的 Symbol 實(shí)現(xiàn)私有成員功能,結(jié)合實(shí)例形式分析了ES5 模擬 ES6 的 Symbol 實(shí)現(xiàn)私有成員功能相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05
JS實(shí)現(xiàn)獲取時(shí)間已經(jīng)時(shí)間與時(shí)間戳轉(zhuǎn)換
這篇文章主要為大家提供了用JavaScript編寫(xiě)的獲取時(shí)間的類,以及時(shí)間戳轉(zhuǎn)時(shí)間的三種格式,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-03-03

