vue輸入框中輸完后光標(biāo)自動(dòng)跳到下一個(gè)輸入框中的實(shí)現(xiàn)方法
前言
最近接到這么一個(gè)需求,做一個(gè)安全碼的輸入框,限制為6位數(shù),但是每一個(gè)寫入的值都是一個(gè)輸入框,共計(jì)6個(gè)輸入框,當(dāng)前輸入框?qū)懭胫岛?,光?biāo)自動(dòng)跳到下一個(gè)輸入框中,刪除當(dāng)前輸入框?qū)懭氲闹岛笤僮詣?dòng)跳到上一個(gè)輸入框中。
實(shí)現(xiàn)思路
首先我們需要通過 keyup() 事件在用戶輸入完字符后,利用 document.getElementsByClassName 方法獲取到輸入框的 dom 元素集合,拿到當(dāng)前元素的 key 和 index 值,通過判斷確定光標(biāo)是否跳到下一個(gè)輸入框(focus)還是光標(biāo)失焦(blur);keydown() 事件主要就是為了防止一旦輸入過快,一個(gè)輸入框中會(huì)有多個(gè)字符的問題。 本章用到的屬性以及方法如下:
focus()
focus() 當(dāng)元素獲得焦點(diǎn)時(shí)(當(dāng)通過鼠標(biāo)點(diǎn)擊選中元素或通過 tab 鍵定位到元素時(shí)),發(fā)生 focus 事件。focus() 方法觸發(fā) focus 事件,或規(guī)定當(dāng)發(fā)生 focus 事件時(shí)運(yùn)行的函數(shù)。
blur()
當(dāng)元素失去焦點(diǎn)時(shí)發(fā)生 blur 事件。blur() 方法觸發(fā) blur 事件,或規(guī)定當(dāng)發(fā)生 blur 事件時(shí)運(yùn)行的函數(shù)。
keyup()
keyup() 方法觸發(fā) keyup 事件,或規(guī)定當(dāng)發(fā)生 keyup 事件時(shí)運(yùn)行的函數(shù)。
keydown()
當(dāng)鍵盤鍵被按下時(shí)觸發(fā) keydown 事件。需要注意的是 keydown() 是在鍵盤按下觸發(fā),而 keyup() 是在鍵盤松手就會(huì)觸發(fā)。
document.getElementsByClassName()
getElementsByClassName() 方法返回文檔中所有指定類名的元素集合,作為 NodeList 對(duì)象。NodeList 對(duì)象代表一個(gè)有順序的節(jié)點(diǎn)列表。NodeList 對(duì)象 我們可通過節(jié)點(diǎn)列表中的節(jié)點(diǎn)索引號(hào)來訪問列表中的節(jié)點(diǎn)(索引號(hào)由0開始)。
完整源碼
<template>
<div class="parentBox">
<div v-for="(item, index) in inputList" :key="index">
<input type="text" v-model="item.pinless" class="inputValue" @keyup="keyboard($event, index)" @keydown="expurgate(index)" />
</div>
</div>
</template>
<script>
export default {
data() {
return {
// 輸入框循環(huán)的數(shù)組
inputList: [
{ pinless: "" },
{ pinless: "" },
{ pinless: "" },
{ pinless: "" },
{ pinless: "" },
{ pinless: "" },
],
};
},
methods: {
// 鍵盤松開事件
keyboard(e, index) {
let domNode = document.getElementsByClassName("inputValue"),
currInput = domNode[index],
nextInput = domNode[index + 1],
lastInput = domNode[index - 1];
if (e.keyCode != 8) {
if (index < this.inputList.length - 1) {
nextInput.focus();
} else {
currInput.blur();
}
} else {
if (index != 0) {
lastInput.focus();
}
}
},
// 鍵盤按下觸發(fā)
expurgate(index) {
this.inputList[index].pinless = "";
},
},
};
</script>
<style scoped>
.parentBox {
padding: 20px;
display: flex;
}
.parentBox div:nth-child(n + 2) {
margin-left: 4px;
}
input {
color: #606266;
font-size: 18px;
text-align: center;
width: 54px;
height: 62px;
border: 2px solid gainsboro;
border-radius: 4px;
}
</style>
實(shí)現(xiàn)效果

總結(jié)
到此這篇關(guān)于vue輸入框中輸完后光標(biāo)自動(dòng)跳到下一個(gè)輸入框中的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)vue輸入框輸完自動(dòng)跳到下個(gè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue的根路徑為什么不能作為跳板跳轉(zhuǎn)到其他頁面(問題診斷及方案)
文章主要介紹了Vue應(yīng)用中路由配置錯(cuò)誤的診斷和解決方案,根路徑配置錯(cuò)誤和未正確使用`<router-view>`標(biāo)簽是常見的問題,會(huì)導(dǎo)致路由參數(shù)無法正常傳遞,感興趣的朋友跟隨小編一起看看吧2025-03-03
vue?Proxy數(shù)據(jù)代理進(jìn)行校驗(yàn)部分源碼實(shí)例解析
Proxy提供了強(qiáng)大的Javascript元編程,有許多功能,包括運(yùn)算符重載,對(duì)象模擬,簡潔而靈活的API創(chuàng)建,對(duì)象變化事件,甚至Vue 3背后的內(nèi)部響應(yīng)系統(tǒng)提供動(dòng)力,這篇文章主要給大家介紹了關(guān)于vue?Proxy數(shù)據(jù)代理進(jìn)行校驗(yàn)部分源碼解析的相關(guān)資料,需要的朋友可以參考下2022-01-01
Vue3+Vite+TS實(shí)現(xiàn)二次封裝element-plus業(yè)務(wù)組件sfasga
這篇文章主要介紹了在Vue3+Vite+TS的基礎(chǔ)上實(shí)現(xiàn)二次封裝element-plus業(yè)務(wù)組件sfasga,下面文章也將圍繞實(shí)現(xiàn)二次封裝element-plus業(yè)務(wù)組件sfasga的相關(guān)介紹展開相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可惡意參考一下2021-12-12
WebStorm無法正確識(shí)別Vue3組合式API的解決方案
這篇文章主要介紹了WebStorm無法正確識(shí)別Vue3組合式API的解決方案,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下2021-02-02
Vue Element-ui表單校驗(yàn)規(guī)則實(shí)現(xiàn)
Element-ui表單校驗(yàn)規(guī)則,使得錯(cuò)誤提示可以直接在form-item下面顯示,無需彈出框,感興趣的小伙伴們可以參考一下2021-07-07
vue?elementui?實(shí)現(xiàn)圖片上傳后拖拽排序功能示例代碼
這篇文章主要介紹了vue?elementui?實(shí)現(xiàn)圖片上傳后拖拽排序功能,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01

