Vue2 实现带输入的动态表格,限制el-input输入位数以及输入规则(负数、小数、整数)

news2024/11/17 8:24:57

Vue2 实现el-input带输入限制的动态表格,限制输入位数以及输入规则(负数、小数、整数)

在这个 Vue2 项目中,我们实现一个限制输入位数(整数16位,小数10位)以及输入规则(负数、小数、整数),并提供了处理用户输入的方法。以下是代码的解释:

var num = this.inputLimit(e, 16, 10, scope, index);

参数解释:

e: 事件对象,代表触发函数的输入事件,通常用于获取事件相关信息,如输入值。

16: 整数部分的最大允许位数,作为 intMax 在 inputLimit 函数中使用,用于限制整数部分的长度。

10: 小数部分的最大允许位数,作为 dotMax 在 inputLimit 函数中使用,用于限制小数部分的长度。

scope: 代表 Vue 模板中的 slot-scope 对象,通常用于访问表格中正在迭代的行的属性。

index: 当前迭代的循环索引,通常用于确定当前项目在数组或列表中的位置。

总结一下:

e: 输入事件对象。
16: 整数部分的最大位数。
10: 小数部分的最大位数。
scope: Vue 模板中的 slot-scope 对象,用于访问表格中的行数据。
index: 当前迭代的循环索引。
inputLimit 函数的设计旨在基于提供的约束条件(整数部分长度、小数部分长度)限制输入,并处理各种场景,如负数。返回的 num 可能是经过处理和限制的输入值。

完整代码:

<template>
  <div class="hello">
    <el-table v-loading="loading" :data="versionList" height="calc(100vh - 270px)" size="small">
      <el-table-column label="名称" align="center" prop="name" :show-overflow-tooltip="true" width="200" />
      <el-table-column v-for="(item, index) in fillYear" :key="item" :label="item" align="center" :prop="item" width="200"
        :show-overflow-tooltip="true">
        <template slot-scope="scope">
          <el-input type="text" v-model="scope.row.fillData[index].value" @change="handleInput($event, scope, index)" />
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  data() {
    return {
      loading: false,
      fillYear: ["2019", "2020", "2021", "2022"],
      versionList: [
        {
          name: "书包",
          fillData: [
            { key: "2019", value: "" },
            { key: "2020", value: "" },
            { key: "2021", value: "" },
            { key: "2022", value: "" },
          ],
        },
        {
          name: "铅笔",
          fillData: [
            { key: "2019", value: "" },
            { key: "2020", value: "" },
            { key: "2021", value: "" },
            { key: "2022", value: "" },
          ],
        },
        {
          name: "橡皮",
          fillData: [
            { key: "2019", value: "" },
            { key: "2020", value: "" },
            { key: "2021", value: "" },
            { key: "2022", value: "" },
          ],
        },
        {
          name: "玩具",
          fillData: [
            { key: "2019", value: "" },
            { key: "2020", value: "" },
            { key: "2021", value: "" },
            { key: "2022", value: "" },
          ],
        },
      ],
    };
  },
  methods: {
    handleInput(e, scope, index) {
      // 获取用户输入的值
      // let inputValue = scope.row.fillData[index].value;
      // 使用正则表达式检查输入值是否为数字或小数
      // let regex = /^[0-9]+(\.[0-9]{0,2})?$/;

      // 如果不匹配正则表达式,则清除非法字符
      // if (!regex.test(inputValue)) {
      //     inputValue = inputValue.replace(/[^\d.]/g, '');

      // 更新绑定的值
      //     this.$set(scope.row.fillData, index, { ...scope.row.fillData[index], value: inputValue });
      // }
      var num = this.inputLimit(e, 16, 10, scope, index);
      console.log(`🚀>> ${num}`)
    },
    inputLimit(num, intMax, dotMax, scope, index) {
      if (num === undefined || num === null) {
        return '0';
      }

      var next = num.toString();
      var hasCompany = next.startsWith('-');
      next = hasCompany ? next.substring(1) : next;

      if (next.includes('.')) {
        // 小数
        var [intNum, dotNum] = next.split('.').map(part => part.replace(/[^0-9]/g, ''));
        next = `${intNum}.${dotNum}`;
        this.$set(scope.row.fillData, index, { ...scope.row.fillData[index], value: `${hasCompany ? '-' : ''}${next}` });
      } else {
        // 非小数
        next = next.replace(/[^0-9]/g, '');
        this.$set(scope.row.fillData, index, { ...scope.row.fillData[index], value: `${hasCompany ? '-' : ''}${next}` });
      }

      if (Number(next)) {
        var resNum = '';
        if (next.includes('.')) {
          var [intPart, dotPart] = next.split('.');
          // 限制整数位数16、小数10位
          intPart = intPart.substring(0, intMax);
          dotPart = dotPart.substring(0, dotMax);
          resNum = Number(`${intPart}.${dotPart}`).toFixed(dotPart.length);
        } else {
          resNum = next.substring(0, intMax);
        }
        this.$set(scope.row.fillData, index, { ...scope.row.fillData[index], value: `${hasCompany ? '-' : ''}${resNum}` });
        return resNum;
      }
      return '0';
    },
  },
  created() {
    console.log(this.versionList);
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped></style>

效果图如下:
输入非整数、小数、负数,且包含其他字符或非法数字的,change事件之后会处理为正常的数据
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1377455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计-----Springboot ERP管理系统

项目介绍 系统主要功能包括&#xff1a; 首页 零售管理&#xff1a;零售出库、零售退货&#xff1b; 采购管理&#xff1a;采购订单、采购入库、采购退货&#xff1b; 销售管理&#xff1a;销售订单、销售出库、销售退货&#xff1b; 仓库管理&#xff1a;其它入库、其它出库、…

从零开始搭建一个个人博客并部署发布

1、为什么要自己搭建一个个人博客呢 首先&#xff0c;市场上主流的个人博客有CSDN、掘金、博客园等博客平台&#xff0c;这些平台方便了用户创作、记录的同时&#xff0c;也存在一些弊端&#xff0c;比如某些平台可能你的文章阅读量过高的话&#xff0c;会强制收费等问题已经是…

Linux 软连接ln -s

什么是文件软链接&#xff1f; Linux 的“软连接”与windos 的"快捷方式"相似。文件软链接&#xff08;Symbolic Link 或 SymLink&#xff09;是一种特殊的文件类型&#xff0c;它实际上是一个指向另一个文件或目录的引用。创建软链接时&#xff0c;系统会建立一个新…

线性代数:由矩阵 AB=A 可以推出 B=E 吗?

其实&#xff0c;类似的问题在十几年前的各种提问中就出现了&#xff0c;而且&#xff0c;根据 A B A A BA ABA 推出 B E BE BE 有时候也相当 "符合直觉”&#xff0c;但如果追根问底&#xff0c;矩阵 B B B 到底应该是什么样子的&#xff0c;却很少有详细的解答。 …

高斯数据库 Gauss

gauss DB OLTP 交易 保证数据和安全&#xff0c;主要是银行使用 gauss DB OLAP 分析 大部分是网络公司 gsql 使用gauss数据库的工具 $ gsql -d 数据库名 -p 端口号 -u 用户名 -w 密码 -h 客户端ipgsql 常用参数 -d选项&#xff1a; 指定gsql客户端连接的数据库-h选项&#xff1…

打字侠网站:为何致力于青少年的打字乐趣与成长

在这个数字化时代&#xff0c;计算机已经深刻地渗透到我们的生活中&#xff0c;成为沟通、学习和表达的主要方式。而对于青少年而言&#xff0c;打字作为一项基本技能&#xff0c;不仅仅是应对学业的需要&#xff0c;更是未来发展的必备素养。正是基于这一认知&#xff0c;我决…

Android perfetto memory开源工具分析

目录 原理 官网链接 下载heap_profile producer_support.cc 本地编译 push heapprofd 工具使用 pb文件获取 打开*.pb文件 trace文件 提高系统CPU性能 拆解特定函数内存占用 环境配置 工具使用 修改heap_profile 脚本 原理 Android perfetto memory分析工具和ma…

Netty通信中的粘包半包问题(一)

前言 我们在日常开发过程中&#xff0c;客户端和服务端的连接大多使用的是TCP协议,因为我们要保证数据的可靠传输&#xff0c; 当网络中出现丢包时要求&#xff0c;要求数据包的发送端重传给接收端。而TCP是一种面向连接的传输层协议&#xff0c; 当使用TCP进行传输时&#xf…

Mysql时间差8小时解决方案

目录 1. MySQL 本身的问题1-1. 验证MySQL时间1-2. 修改Mysql时区配置文件修改Mysql时区SQL修改Mysql时区 2.JDBC 连接的问题3. 返回 JSON 时间不对 在开发中&#xff0c;有可能会遇到这种情况&#xff1a; 插入数据库中的时间时正常。但是将时间传到前端页面上显示时&#xff…

【Linux】 nohup命令使用

nohup命令 nohup是Linux和Unix系统中的一个命令&#xff0c;其作用是在终端退出时&#xff0c;让进程在后台继续运行。它的全称为“no hang up”&#xff0c;意为“不挂起”。nohup命令可以让你在退出终端或关闭SSH连接后继续运行命令。 nohup 命令&#xff0c;在默认情况下&…

大数据StarRocks(五) :数据类型

StarRocks 支持数据类型&#xff1a;数值类型、字符串类型、日期类型、半结构化类型、其他类型。您在建表时可以指定以下类型的列&#xff0c;向表中导入该类型的数据并查询数据。 5.1 数值类型 SMALLINT2 字节有符号整数&#xff0c;范围 [-32768, 32767] INT4 字节有符号整…

探索SQL性能优化之道:实用技巧与最佳实践

SQL性能优化可能是每个数据库管理员和开发者在日常工作中必不可少的一个环节。在大数据时代&#xff0c;为确保数据库系统的响应速度和稳定性&#xff0c;掌握一些实用的SQL优化技巧至关重要。 本文将带着开发人员走进SQL性能优化的世界&#xff0c;深入剖析实用技巧和最佳实践…

彻底解决charles抓包https乱码的问题

最近做js逆向&#xff0c;听说charles比浏览器抓包更好用&#xff0c;结果发现全是乱码&#xff0c;根本没法用。 然后查询网上水文&#xff1a;全部都是装证书&#xff0c;根本没用&#xff01; 最后终于找到解决办法&#xff0c;在这里记录一下&#xff1a; 乱码的根本原因…

Paddle模型转ONNX

深度学习模型在硬件加速器上的部署常常要用到ONNX&#xff08;Open Neural Network Exchange&#xff0c;开放神经网络交换&#xff09;格式&#xff0c;也可以通过ONNX实现不同AI框架&#xff08;如Pytorch、TensorFlow、Caffe2、PaddlePaddle等&#xff09;之间的模型转换。 …

MySQL-外键等信息

38. 基础-多表查询-概述_哔哩哔哩_bilibili 1、流程函数 2、约束字段 删除外键 &#xff1a; alter table emp2 drop foreign key 外键名 //外键可以保持数据的一致性和完整性&#xff0c;外键的话&#xff0c;就是类似一个主表&#xff0c;一个从表&#xff0c;从表的其中一…

【grpc】利用protobuf实现java或kotlin调用python脚本,含实现过程和全部代码

前言 在一些特殊场景中&#xff0c;我们可能需要使用java或者其他任意语言调用python脚本或sdk等。本文的需求衍生也不例外于此&#xff0c;python端有sdk&#xff0c;但只能在python中调用&#xff0c;于是就有了本文章。 常见的调用方式如jython、python提供http rest接口、…

波动,热传导,扩散方程建立

数学物理方程是从自然科学的各个领域和工程技术领域中导出的偏微分方程和积分方程.在这些以偏微分方程为基础的数学模型中&#xff0c;二阶线性偏微分方程中的三个典型方程与定解条件的建立、解法及其应用&#xff0e;描述振动和波动过程的波动方程、描述输运过程的热传导&…

2024年MIA最新生成综述:基于深度学习的MRI/CT/PET合成【文献阅读】

2024年MIA最新生成综述&#xff1a;基于深度学习的MRI/CT/PET合成【文献阅读】 基本信息 标题&#xff1a;Deep learning based synthesis of MRI, CT and PET: Review and analysis发表年份: 2024期刊/会议: Medical Image Analysis分区&#xff1a; SCI 1区IF&#xff1a;1…

知道IP怎么反查域名?这几个方法一查一个准!

知道网络IP怎么反查出真实域名来&#xff1f;给大家分享几个我常用的方法&#xff0c;就算你不懂技术你都能查得出来&#xff01; 一、fofa 这是一个白帽黑客非常喜欢用的社工平台&#xff0c;只要你输入IP就能查到很多背后的信息。 传送门&#xff1a;https://fofa.info 二…

智慧厂区烟火识别系统应用

在当今的智能制造行业中&#xff0c;安全管理已成为优先考虑的重要议题。集度汽车公司在其实验室场区引入了一项创新技术——富维图像厂区烟火识别系统。这个项目的核心是利用先进的烟火识别系统&#xff0c;保障厂区的安全与稳定运行。 系统特点 烟火识别系统的准确率高和误报…