一、技术栈 uniapp+vue3+javascript 二、实现的效果 全部代码可见:https://github.com/zzm319/study-summarize.git(分支为code-login)。 1、进入页面第一个输入框自动聚焦 2、输入后下一个输入框自动聚
| 一、技术栈uniapp+vue3+javascript 二、实现的效果全部代码可见:https://github.com/zzm319/study-summarize.git(分支为code-login)。 
 1、进入页面第一个输入框自动聚焦 2、输入后下一个输入框自动聚焦 3、点击输入区域自动聚焦到无值的第一个输入框(当前一个输入框无值时后一个输入框无法聚焦 ) 4、可以复制粘贴填充也可以短信验证码一键登录 5、监听键盘的删除键(Backspace)删除输入的验证码 三、实现逻辑及代码1、HTML部分:利用循环渲染4个输入框,第一个输入框可输入最大长度无值时为4(为了复制和验证码填充赋值),有值时最大可输入长度为1。 
 2、javascript部分:1)进入页面第一个输入框自动聚焦: 
 2. 输入后下一个输入框自动聚焦,主要是给输入框监听输入事件,判断是否有值,有值就自动聚焦下一个输入框: 
 3)点击输入区域自动聚焦到无值的第一个输入框(当前一个输入框无值时后一个输入框无法聚焦 ),主要是给输入框区域判定一个点击事件,判断当前哪个输入框无值则聚焦: 
 4)监听粘贴事件赋值给每个输入框,主要是利用给第一个输入框赋值后,然后给剩下的三个输入框重新赋值(短信验证码填充同理): 
 注意的是,二次粘贴时需要先重置第一个输入框的最大可输入长度: 
 5)监听键盘的删除键(Backspace)删除输入的验证码: 
 3、完整javascript代码:
 四、遇到的问题1、聚焦实现 由于uniapp使用input是通过封装原生input标签实现的,使用ref获取input dom节点的方式,不能调用focus方法实现聚焦,所以采用原生的获取dom方法实现: 
 2、循环渲染input的方法,当某个输入框的值改变其它输入框也跟着改变 原因是我fill()了一个对象,这种方式相当于四个输入框的值都是同一个对象。 
 3、在做点击输入区域,让焦点自动聚焦到无值的第一个输入框时,发现点击输入框不能实现,点击输入框之间的间隔可以实现。 原因:我给每个输入框设置了diabled属性,让其在上一个输入框有值时才能使用。 
 4、ios的safari浏览器中,验证码填充背景颜色会为黄色: (ps:网上有很多种方法:改变背景色,改变阴影填充等,本人试了都不能实现,下面的方法在iphone14 ios版本为16.1.1中亲测有效) 
 | 
2021-10-12
2021-05-12
2020-05-01
2018-01-16
2019-07-09