【IP地址】输入小数点,自动移到下一输入框

1. 实现效果

输入框最多只能输入三位数字(0-255),按下. 光标会自动跳转到下一个输入框。
在这里插入图片描述

2. 实现过程

  • 给输入框的值绑定一个数组(有4个元素), v-for 遍历生成输入框。
  • 通过动态ref绑定每一个输入框ref
  • 监听输入框是否有输入. ,有就让下一个输入框dom元素获得焦点
<template>
   输入IP
        <el-input
          v-for="(item, i) in convertState.ip"
          :key="i"
          :ref="(e: any) => (numInputRefs[i] = e)"
          v-model="convertState.ip[i]"
          :controls="false"
          class="w-55"
          @input="handleInput(i)" />
</template>

<script setup lang="ts">
import { InputInstance } from 'element-plus';
// numInputRefs 是一个对象,存储多个ref,键名是索引,值是input实例
const numInputRefs = reactive<Record<number, InputInstance>>({});

// 输入框绑定的值
const convertState = reactive({
  ip: ['', '', '', ''],
});

// 输入时触发
const handleInput = (i) => {
  const val = convertState.ip[i];
  // 只允许数字和 .
  if (!val.match(/[0-9.]/)) {
    convertState.ip[i] = val.replace(/[^0-9.]/g, '');
  }
  if (Number(val) < 0) return (convertState.ip[i] = '0');
  if (Number(val) > 255) return (convertState.ip[i] = '255');

  if (val.includes('.')) {
    if (i < convertState.ip.length - 1) {
      // 前三个.跳转
      convertState.ip[i] = val.slice(0, -1);// 输入框移除.
      _.get(numInputRefs, i + 1).focus();// 下一个输入框获得焦点
    } else {
      convertState.ip[i] = val.slice(0, -1);
    }
  }
};
</script>

这里的完整需求是通过输入ip地址和子网掩码计算ip起始和结束地址
完整代码:通过ip地址和掩码位数,计算ip起始地址

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值