原生 js 实现 验证码输入效果

 原理: 第一个输入框获取焦点,输入完内容后,后面的自动获取焦点,当删除的时候,当前删除完之后,前面的自动获取焦点 删除

<div class="xl-flex ">
                                    <div class="input-item">
                                        <input type="text" id='input1' v-model='state.code[0]' maxlength=1 @input = 'handleInput(1)' @keydown.delete="inputValueDelete(1)"  placeholder="0" >
                                    </div>
                                    <div class="input-item">
                                        <input type="text" id='input2' @input = 'handleInput(2)' @keydown.delete="inputValueDelete(2)" v-model='state.code[1]' placeholder="0" maxlength='1'>
                                    </div>
                                    <div class="input-item">
                                        <input type="text" id='input3' @input = 'handleInput(3)' @keydown.delete="inputValueDelete(3)" v-model='state.code[2]' placeholder="0" maxlength='1'>
                                    </div>
                                    <div class="input-item">
                                        <input type="text" id='input4' @input = 'handleInput(4)' @keydown.delete="inputValueDelete(4)" v-model='state.code[3]' placeholder="0" maxlength='1'>
                                    </div>
                                    <div class="input-item">
                                        <input type="text" id='input5' placeholder="0" maxlength='1' @input = 'handleInput(5)' @keydown.delete="inputValueDelete(5)" v-model='state.code[4]'>
                                    </div>
                                    <div class="input-item">
                                        <input type="text" id='input6' @input = 'handleInput(6)'  @keydown.delete="inputValueDelete(6)" v-model='state.code[5]' placeholder="0" maxlength='1'>
                                    </div>
                                </div>
function handleInput(inputNum:any) {

    var currentInput = document.getElementById('input' + inputNum);
    //   currentInput.style.border = '2px solid #17B26A'
    
    var nextInputNum = inputNum + 1;
    var nextInput = document.getElementById('input' + nextInputNum);
    
    if (currentInput.value.length === 1) { // 检查当前输入框的值是否为一个数字
        if (nextInput) { // 如果存在下一个输入框
            nextInput.focus(); // 设置下一个输入框获取焦点
        } else {
            currentInput.blur(); // 如果当前输入框是最后一个,则取消焦点,结束输入流程
        }
    }

}

const inputValueDelete = (inputNum:any)=>{
    var currentInput = document.getElementById('input' + inputNum); // 当前input 
     var preInputNum = inputNum - 1;
    var preInput = document.getElementById('input' + preInputNum);

     if (currentInput.value=='') { // 如果当前输入框没有值
            preInput.focus(); // 设置上一个输入框获取焦点
            currentInput.blur(); // 如果当前输入框是最后一个,则取消焦点,结束输入流程
    }else{
        nextInput.focus()
    }
}

 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值