本篇内容主要讲解“vue输入框怎么实现输完后光标自动跳到下一个输入框中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue输入框怎么实现输完后光标自动跳到下一个输入框中”吧!
实现思路
首先我们需要通过
keyup()事件在用户输入完字符后,利用
document.getElementsByClassName方法获取到输入框的
dom元素集合,拿到当前元素的
key和
index值,通过判断确定光标是否跳到下一个输入框(
focus)还是光标失焦(
blur);
keydown()事件主要就是为了防止一旦输入过快,一个输入框中会有多个字符的问题。 本章用到的属性以及方法如下:
focus()
focus()当元素获得焦点时(当通过鼠标点击选中元素或通过
tab键定位到元素时),发生
focus事件。
focus()方法触发
focus事件,或规定当发生
focus事件时运行的函数。
blur()
当元素失去焦点时发生
blur事件。
blur()方法触发
blur事件,或规定当发生
blur事件时运行的函数。
keyup()
keyup()方法触发
keyup事件,或规定当发生
keyup事件时运行的函数。
keydown()
当键盘键被按下时触发
keydown事件。需要注意的是
keydown()是在键盘按下触发,而
keyup()是在键盘松手就会触发。
document.getElementsByClassName()
getElementsByClassName()方法返回文档中所有指定类名的元素集合,作为
NodeList对象。
NodeList对象代表一个有顺序的节点列表。
NodeList对象 我们可通过节点列表中的节点索引号来访问列表中的节点(索引号由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 {
      // 输入框循环的数组
      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();
        }
      }
    },
    // 键盘按下触发
    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>实现效果