Vue实现多个input输入,光标自动聚焦到下一个input

遇到一个需求,需要实现和移动端短信输入一样,输入内容后,光标会进入下一个输入框

需要用到2个事件 
keydown事件发生在键盘的键被按下的时候

keyup 事件在按键被释放的时候触发

<template>
  <div class="box">
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="demo-ruleForm">
      <el-form-item label="名称" prop="name">
        <span v-for="(item,index) in namelist" :key="index">
          <input v-model="item.val" class="border-input" @keyup="nextFocus($event,index)" @keydown="changeValue(index)" />
        </span>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data () {
    return {
      ruleForm: {
        name: ''
      },
      namelist: [
        { val: '' },
        { val: '' },
        { val: '' }
      ],
      rules: {
        name: [
          { required: true, message: '请输入活动名称', trigger: 'blur' }
        ],
      }
    }
  },
  methods: {
    /*对焦到下一个input框去*/
    nextFocus (el, index) {
      var dom = document.getElementsByClassName("border-input"),
        currInput = dom[index],
        nextInput = dom[index + 1],
        lastInput = dom[index - 1];
      // 删除键
      if (el.keyCode != 8) {
        if (index < (this.namelist.length - 1)) {
          nextInput.focus();
        } else {
          currInput.blur();
        }
      } else {
        if (index != 0) {
          lastInput.focus();
        }
      }
      // 进行赋值
      this.ruleForm.name = this.namelist.map(item => item.val).join('')
    },
    /*当键盘按下的时候清空原有的数*/
    changeValue (index) {
      this.namelist[index].val = "";
    }
  }
}
</script>

<style lang="less" scoped>
.border-input {
  background: #ffffff;
  width: 24px;
  font-size: 24px;
  height: 24px;
  margin-left: 8px;
  text-align: center;
  border: 1px solid #ccc;
  border-radius: 4px;
}
.box {
  width: 400px;
  margin: 0 auto;
  border: 1px solid #ccc;
}
/deep/.el-form-item__content {
  text-align: right;
}
</style>

相关推荐

  1. vue3 实现 input 输入聚焦

    2024-02-18 14:48:02       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-18 14:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-18 14:48:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-18 14:48:02       82 阅读
  4. Python语言-面向对象

    2024-02-18 14:48:02       91 阅读

热门阅读

  1. Docker常用命令

    2024-02-18 14:48:02       37 阅读
  2. Linux常见指令(二)

    2024-02-18 14:48:02       48 阅读
  3. Rust 初体验6

    2024-02-18 14:48:02       49 阅读
  4. sql的order by 按照自定义的顺序排列

    2024-02-18 14:48:02       51 阅读
  5. 深度学习的基本原理和算法

    2024-02-18 14:48:02       51 阅读
  6. CH32V3xx RT-Thread RS485实现modbus rtu master

    2024-02-18 14:48:02       47 阅读
  7. 【嵌入式开发】94

    2024-02-18 14:48:02       52 阅读
  8. Architecting Software Like a Pro: Exploring Key Design Patterns

    2024-02-18 14:48:02       44 阅读