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

这篇具有很好参考价值的文章主要介绍了Vue实现多个input输入,光标自动聚焦到下一个input。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

Vue实现多个input输入,光标自动聚焦到下一个input,javascript,开发语言,ecmascript文章来源地址https://www.toymoban.com/news/detail-828744.html

<template>
  <div class="box">
    <el-form class="demo-ruleForm" ref="form" :model="form" :rules="rules">
      <el-form-item class="form-item" label="身高" prop="Height">
        // 此处为了做校验处理
        <el-input type="text" v-model="Height" v-show="false"></el-input>
        <span v-for="(item,index) in HeightList" :key="index">
          <input type="text" v-model="item.val" class="border-input" maxlength="1" @keyup="nextFocu($event,index, 1)" @keydown="changeValue(index,$event)" />
        </span>
        <span class="text">cm</span>
      </el-form-item>
    </el-form>
  </div>
</template>
 
<script>
const form = {
  Height: '', // 身高
  Weight: '' // 体重
}
export default {
  data () {
    const validatePass = (rule, value, callback) => {
      if (value.length < 3) {
        callback(new Error('请输入'))
      } else if (isNaN(value)) {
        callback(new Error('请输入数字'))
      } else {
        if (value <= 99) {
          callback(new Error('小于99'));
        } else if (value >= 251) {
          callback(new Error('大于251'))
        } else {
          callback()
        }
      }
    }
    const validatePass2 = (rule, value, callback) => {
      console.log(value)
      if (value.length < 4) {
        callback(new Error('请输入'))
      } else if (isNaN(value)) {
        callback(new Error('请输入数字'))
      } else {
        if (value < '0200') {
          callback(new Error('不能以0开头'))
        } else if (value > '2000') {
          callback(new Error('不能大于2000'))
        } else {
          callback()
        }
      }
    }
    return {
      Height: '', // 身高
      Weight: '', // 体重
      form: { ...form },
      HeightList: [
        {
          val: ''
        },
        {
          val: ''
        },
        {
          val: ''
        }
      ],
      WeightList: [
        {
          val: ''
        },
        {
          val: ''
        },
        {
          val: ''
        },
        {
          val: ''
        }
      ],
      rules: {
        Height: [
          { validator: validatePass, trigger: ['focus', 'blur', 'change'] },
        ],
        Weight: [
          { validator: validatePass2, trigger: ['focus', 'blur', 'change'] },
        ]
      }
    }
  },
  methods: {
    // 下一个文本框
    nextFocu (el, index, type) {
      let list = this[type === 1 ? 'HeightList' : 'WeightList'];
      let field = type === 1 ? "Height" : "Weight";
      let val = list[index].val;
      var dom = document.getElementsByClassName(el.srcElement.className),
        currInput = dom[index],
        nextInput = dom[index + 1],
        lastInput = dom[index - 1];
      if (el.keyCode != 8) {
        //禁止输入非数字类型
        if (!val.replace(/\D/g, '')) {
          list[index].val = "";
          return
        }
        if (index < (list.length - 1)) {
          nextInput.focus();
        } else {
          currInput.blur();
        }
      } else {
        if (index != 0) {
          lastInput.focus();
        }
      }
      // 数据转成字符串
      this.form[field] = list.map(item => { return item.val }).join('')
      // 重新赋值
      this[field] = this.form[field]
    },
    /*当键盘按下的时候清空原有的数*/
    changeValue (index, el) {
      if (el.keyCode !== 32) {
        this.HeightList[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;
}
/deep/ .el-form-item__error {
  position: absolute;
  right: 20px;
}
</style>

到了这里,关于Vue实现多个input输入,光标自动聚焦到下一个input的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 页面上input输入框宽度实现自动调整

       input输入框宽度实现自动调整,本文介绍两种方式,一是通过获取input 内容的宽度 实现输入框宽度的自动调整;二是通过内容字符串的长度乘以文本字体大小的积,来实现输入框宽度的自动调整。 1、input输入框宽度的获取方式一    由于input输入框中text文本的实际宽度

    2024年02月14日
    浏览(36)
  • vue获取+设置光标位置 光标定位 选择输入框文本

    版本:vue2、vant2 在vue是用ref、 r e f s 获取 d o m 的,在 v a n t 框架里 v a n − f i e l d 是输入框组件,它不支持直接设置光标的方法 s e t S e l e c t i o n R a n g e ( ) ,所以通过 t h i s . refs获取dom的,在vant框架里van-field是输入框组件,它不支持直接设置光标的方法setSelectionRange(),所

    2024年02月16日
    浏览(51)
  • 【uniapp】如何手动实现让input文本框聚焦

    开发中遇到一个问题,希望在每次操作页面完成后,input文本框都能自动聚焦,那么问题来了,应该怎么做,接下来请继续往下看。 也许大多数同学都会这么做,尝试过修改文本框属性 focus 为 true ,但是没有效果,参考如下 尝试手动实现,调用focus事件,想到它可不像之前的

    2024年02月12日
    浏览(94)
  • 前端实现输入框实时搜索,【vue+el-input】

    一般搜索都是调后端的接口,绑searchValue字段(也有可能叫其他的字段名),通过后端的接口进行实时搜索 如果由前端自己实现搜索过滤的话也简单 1、input事件 2、绑数据源的时候,根据条件判断用过滤数组还是原数组 3、data中定义数据 4、先获取原数组的数据 5、输入框in

    2024年02月09日
    浏览(47)
  • Unity主动聚焦InputField并且设置光标位置

    在一次文本输入的设计中,需要用到点击自定义的Button来删除InputField里对应光标位置的字符,并且保持InputField和光标不会丢失焦点 实现删除字符 实现InputField焦点不丢失 实现光标不消失 解决光标重设时,由于自动SelectAll时导致的选中颜色闪烁 各位有更优的办法可以分享分

    2024年02月13日
    浏览(37)
  • css伪类元素使用技巧 表达input父级聚焦css实现

    在这里插入图片描述

    2024年02月08日
    浏览(51)
  • 【iosH5开发】IOS浏览器对于Vue3 Element-plus el-input中,input.value.focus无法聚焦问题

    此次项目遇到了两个问题,一个是在Vue3中el-input的input.value.focus()无法触发,但是在PC或者安卓均可触发。 第二个问题是ios浏览器H5没有办法默认聚焦触发键盘输入

    2024年02月13日
    浏览(57)
  • Vue:实现输入框/选择列表内容更改,页面实时预览多个内容变化

    在各种前端页面中,比如用户信息注册的页面,往往有多个输入框和多个选项列表。 为了避免用户选错或者输入错误,可以在前端页面上实时将多个输入框的内容拼接起来,显示到页面或者弹出的窗口中,帮助用户核对、检查输入的内容是否有错,提高用户体验。 本文介绍

    2024年02月10日
    浏览(44)
  • 【Vue】输入框状态切换&自动获取输入框焦点の实现

    场景:点击 button 按钮展示输入框,并自动获取对话框焦点,失去焦点时展示 button 按钮 实现: 点击 button 按钮展示输入框,失去焦点时展示 button 按钮 在data中定义 visibility ,确定输入框的展示状态,默认为 false 定义 changeVisibility 方法,并给 button 绑定点击事件@ click=\\\"changeVi

    2024年02月12日
    浏览(36)
  • Vue3输入框(Input)

    参数 说明 类型 默认值 必传 width 输入框宽度 string | number ‘100%’ false addonBefore 设置前置标签 string | slot ‘’ false addonAfter 设置后置标签 string | slot ‘’ false allowClear 可以点击清除图标删除内容 boolean false false password 是否启用密码框 boolean false false disabled 是否禁用 boolean fal

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包