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

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事件之后会处理为正常的数据
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python商业数据挖掘实战——爬取网页并将其转为Markdown

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言前言正则表达式进行转换送书活动 前言 在信息爆炸的时代&#xff0c;互联网上的海量文字信息如同无尽的沙滩。然而&#xff0c;其中真正有价值的信息往往埋…

如何高效编写测试用例

本话题暂不探讨是否有必要编写详细的测试用例&#xff0c;在确定要交付详细的测试用例这个前提下&#xff0c;分享如何更高效地完成测试用例的编写。 对齐测试用例需求 首先、明确要完成的测试用例文档目标要求&#xff0c;模板、范围、粒度等。 用例文档使用者&#xff1a;…

内网穿透NPS搭建以及使用

今天说一下 内网穿透代理&#xff08;NPS&#xff09;搭建以及使用&#xff0c;内网穿透必然有一个外网服务器做代理转发&#xff0c;市面上的NATAPP、花生壳等也都是一个原理。 需求&#xff1a; window 本地开发&#xff0c;外网访问本地服务联合调试 环境&#xff1a; 公网…

HackerGPTWhiteRabbitNeo的使用及体验对比

1. 简介 WhiteRabbitNeo&#xff08;https://www.whiterabbitneo.com/&#xff09;是基于Meta的LLaMA 2模型进行特化的网络安全AI模型。通过专门的数据训练&#xff0c;它在理解和生成网络安全相关内容方面具有深入的专业能力&#xff0c;可广泛应用于教育、专业培训和安全研究…

基于python的室内老人实时摔倒智能监测系统(康复训练检测+代码)

概述 导入所需的库&#xff0c;包括cv2、和numpy。 定义了一个用于计算角度的函数calculate_angle(a, b, c)&#xff0c;其中a、b和c是三个关键点的坐标。 初始化姿态检测和绘图工具。 打开并读取视频文件。 -摔倒检测&#xff08;fallen&#xff09; 循环遍历视频的每一帧…

【计算机组成-计算机基本结构】

课程链接&#xff1a;北京大学陆俊林老师的计算机组成原理课 1. 电子计算机的兴起 原因&#xff1a;二战对计算能力的需求世界上第一台通用电子计算机 ENIAC&#xff08;Electronic Numerical Integrator And Computer&#xff09;&#xff1a;时间&#xff1a;1946&#xff1…

小智ToDo:日程待办清单管理的智能助手

在繁忙的工作与生活中&#xff0c;有效的时间管理和任务规划是提高效率的关键。今天&#xff0c;我们来探讨一款名为“小智ToDo”的日程待办清单管理工具&#xff0c;它以其多端数据同步、备忘提醒、日程管理等实用功能&#xff0c;为用户提供了便捷的时间管理解决方案。 小智T…

单主机双屏幕实现跨屏幕信息交互的GUI程序

单主机双屏幕实现跨屏幕信息交互的GUI程序 运行程序界面 屏幕1发送数据&#xff0c;屏幕2接收数据 在屏幕1按下打开开关&#xff0c;屏幕2播放视频 代码程序 import tkinter as tk # 导入tkinter模块&#xff0c;用于创建GUI界面 import threading # 导入threading模块&#…

【Java 干货教程】Java实现分页的几种方式详解

一、前言 无论是自我学习中&#xff0c;还是在工作中&#xff0c;固然会遇到与前端搭配实现分页的功能&#xff0c;发现有几种方式&#xff0c;特此记录一下。 二、实现方式 2.1、分页功能直接交给前端实现 这种情况也是有的&#xff0c;(根据业务场景且仅仅只能用于数据量…

RT-Thread GD32F4xx实现SD卡热插拔检测功能

GD32F470移植RT-Thread操作系统添加SD卡功能&#xff0c;增加SD卡热插拔检测 一、RT-Thread移植sd卡功能二、实现SD卡热插拔检测原理三、软件实现过程四、延展之ASSERT ERROR&#xff0c;即RT-Thread断言错误五、延展之STM32 SD卡热插拔检测六、结束语 一、RT-Thread移植sd卡功…

代码随想录算法训练营第三十一天|理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

题目&#xff1a;理论基础 解释&#xff1a;贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优 题目&#xff1a;455.分发饼干 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:455.分发饼干 题目链接&#xff1a;力扣题目链接 图释&#x…

C语言用函数指针实现计算器

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现目录函数&#xff1b; void menum() {//打印目录&#xff1b;printf("***********************************************\n");printf("***…

公司官网,选全站定制还是模板建站?

最近更新了公司网站&#xff0c;总算了了一件大事。 虽然很久以前也做网站&#xff0c;但随着技术的发展&#xff0c;以前经常用的dreamwaver、table等形式&#xff0c;不知道被升级了多少代。现在前端同事说起的各种架构&#xff0c;对我来说是云里雾里。只能看懂一点点。 这…

【cmu15445c++入门】(5)c++中的模板类

一、template模板类 除了模板方法【cmu15445c入门】(4)c中的模板方法 模板也可以用来实现类 二、代码 /*** file templated_classes.cpp* author Abigale Kim (abigalek)* brief Tutorial code for templated classes.*/// Includes std::cout (printing). #include <io…

Dubbo的SPI机制

Dubbo SPI的基本工作流程&#xff1a; 加载扩展点配置&#xff1a;Dubbo SPI首先会加载所有的扩展点配置&#xff0c;这些配置通常是在META-INF/dubbo目录下的properties文件中定义的。每个配置文件的名称就是扩展点接口的全限定名&#xff0c;文件内容是扩展点实现的键值对&am…

BSP视频教程第29期:J1939协议栈CAN总线专题,源码框架,执行流程和应用实战解析,面向车通讯,充电桩,模组通信等(2024-01-08)

视频教程汇总帖&#xff1a;【学以致用&#xff0c;授人以渔】2024视频教程汇总&#xff0c;DSP第12期&#xff0c;ThreadX第9期&#xff0c;BSP驱动第29期&#xff0c;USB实战第5期&#xff0c;GUI实战第3期&#xff08;2024-01-08&#xff09; - STM32F429 - 硬汉嵌入式论坛 …

【2024系统架构设计】 系统架构设计师第二版-面向服务架构设计理论与实践

目录 一 概述 二 SOA的参考架构 三 SOA主要协议和规范 四 SOA设计标准和原则 五 SOA的设计模式 六 SOA的构建和实施 ​

《豫鄂烽火燎原大小焕岭》:一部穿越时空的历史史诗

《豫鄂烽火燎原大小焕岭》&#xff1a;一部穿越时空的历史史诗 一部赓续红色血脉的生动教材 一部讴歌时代英雄和人民精神宝典 当历史的烽烟渐渐远去&#xff0c;留下的是一页页泛黄的记忆和无数英雄的壮丽诗篇。李传铭的力作《豫鄂烽火燎原大小焕岭》正是这样一部深情的回望&am…

AIGC必备知识点:你不可不知的CNN(卷积神经网络)-知识全解析!

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 大家在谈论的卷积神经网络究竟是什么&#xff1f;(Convolutional Neural Ne…