关于element UI 中输入框禁止输入空格的实现

2023-11-19

关于element UI 中输入框禁止输入空格的实现

在项目开发过程中会遇到输入框禁止输入空格或者特殊字符之类的需求,其中禁止输入空格的实现方法如下所示。
1、使用vue框架中的.trim修饰符

<el-input class="nameInput" maxlength="20" v-model.trim="form.teamName" placeholder="请输入团队名称"></el-input>

2、使用原生input标签自带的keyup事件监听方法

// 实现一,简单
<el-input class="nameInput" maxlength="20" v-model="form.teamName" 
@keyup.native="$event.target.value = $event.target.value.replace(/^\s+|\s+$/gm,'')"
 placeholder="请输入团队名称"></el-input>
// 实现二,更符合WEB标准,结构,表现和行为分离原则
<el-input class="nameInput" maxlength="20" v-model="form.teamName" @keyup.native="trimLR" placeholder="请输入团队名称"></el-input>
//js部分
trimLR() {
            this.form.teamName = this.form.teamName.replace(/^\s+|\s+$/gm,'')
        }

以上实现方法,需要注意,原生事件onkeyup,改成了@keyup,并且需要在后边追加修饰符.native,这样就是告诉vue使用input的原生事件监听方法,此外,在方法的数据处理中,使用的是$event.target.value来代表input框的value值,不是this.value,也不是document.getElementById(‘XXX’).value。

在方法一中,虽然最终formData.title字段的值,过滤掉了首尾的空格,但是实践发现,在input框的展示上,并没有将空格过滤掉,还是展示的是有空格的数据。因此,更提倡第二种方法,使得数据和展示保持一致性,也方便后续问题的排查和维护。

尝试在方法二中,将keyup事件方法改为input或者change,虽然最终结果,value值过滤掉了空格,但是在页面展示上,value值还是保留了空格,以及光标的位置显示,有些混乱的问题,与方法一的表现差不多。所以还是提倡使用keyup事件来处理禁止输入的问题。
3、使用element UI 的表单验证功能

<el-form ref="myForm" :model="formData" :rules="rules" label-width="100px">
     ... ...
     <el-form-item label="名称" prop="title">
            <el-input placeholder="请输入名称" v-model="formData.title" maxlength=30></el-input>
     </el-form-item>
     ... ...
     <el-form-item>
            <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
  </el-form-item>
</el-form>
 
-----------------
 
// 实现一
 
data() {
        // 自定义title验证规则
        var validateTitle = (rule, value, callback) => {
            const reg = /^[a-zA-Z_\u4e00-\u9fa5]+$/
            if (!reg.test(value)) {
                callback(new Error('只允许填写汉字、字母、下划线'))
            } else {
                callback()
            }
        }
        return {
            ... ...
            //表单验证规则
            rules: {
                ... ...
                title: [
                    { required: true, message: '请输入名称', trigger: 'change' },
                    { validator: validateTitle, trigger: 'change' }
                ],
                ... ...
            },
            ... ... 
        }
    },
 
// 实现二
data() {
        return {
            ... ...
            //表单验证规则
            rules: {
                ... ...
                title: [
                    { 
                        required: true, 
                        validator: (rule, value, callback) => {
                            const reg = /^[a-zA-Z_\u4e00-\u9fa5]+$/
                            if (value == '') {
                                callback(new Error('请填写必填项'))
                            } else if (!reg.test(value)) {
                                callback(new Error('只允许填写汉字、字母、下划线'))
                            } else {
                                callback()
                            }
                        },
                        trigger: 'change' 
                     }
                ],
                ... ...
            },
            ... ... 
        }
    },
---------------------
 
methods: {
   ... ...
   submitForm(formName) {
       this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
   }
   ... ...
 
}

该方法,需要使用element UI 的Form表单el-form标签,ref属性用来指定表单的名称,用于在代码中使用this.$ref.XXX方法寻找表单所在的DOM节点;rules属性用来指定验证规则;在el-form-item标签中,添加prop属性,属性值与rules验证规则中需验证的字段保持一致。以上两种实现方法,请注意区别和各自的特点。如果考虑复用性,可以使用实现一的写法,如果代码比较多,并且也不会复用的,可以参考实现二的写法,方便规则的寻找。

结合确定按钮的点击事件,将表单ref的属性值传递给submitForm方法,通过this.$refs[formName].validate()方法来判定表单中所有的验证是否都通过了,valid为false,表示未通过的会在表单的相应位置展示自定义的message信息,提示用户按照规则输入。如果valid为true,表明验证通过,执行相关逻辑。这里要注意的一点是,在验证规则rules中,非验证条件下,必须返回callback()方法,使得表单验证形成闭合,否则虽然表单中都展示绿色边框,表示验证通过,但是valid还是false。

此外,第三种方法,只会实时提示警告,展示给用户,所输入的内容不符合自定义的验证规则,但是不会将输入的内容进行过滤,如果有完全禁止输入,而不是只提示用户的需求时,需要结合方法二来进行处理。

举一反三,其他禁止输入的需求,比如只允许输入数字,不允许输入特殊字符等需求,也可以按照上述方法进行处理,并保持数据与展示一致。
————————————————
版权声明:本文为CSDN博主「rushichunqiu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rushichunqiu/article/details/95939612

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于element UI 中输入框禁止输入空格的实现 的相关文章

  • 应用级缓存

    缓存介绍 缓存 让数据更接近使用者 目的是让访问速度更快 工作机制是先从缓存中读取数据 如果没有 再从慢速设备上读取实际数据并同步到时缓存 缓存命中率 缓存回收策略 JAVA缓存类型 堆缓存 堆外缓存 磁盘缓存 分布式缓存 多级缓存
  • 电脑桌面图标不见了?三招教你轻松找回

    电脑桌面上的图标对于我们日常的操作和使用非常重要 但有时候会出现电脑桌面图标不见了的情况 让人感到困扰 在本文中 我们将介绍三种常见的方法 帮助您找回丢失的电脑桌面图标 让您的使用更加顺畅 方法1 查找桌面图标文件夹 相信很多人会遇到这样的
  • 蓝桥杯 成绩统计

    目录 问题描述 思路分析及代码实现 问题描述 小蓝给学生们组织了一场考试 卷面总分为 100 分 每个学生的得分都是一个 0 到 100 的整数 如果得分至少是 60 分 则称为及格 如果得分至少为 85 分 则称为优秀 请计算及格率和优秀

随机推荐

  • 51单片机的串口通迅

    通信的基本方式分为并行通信和串行通信 并行通信 数据的各位同时在多根数据线上发送或接收 特点 控制简单 传输速度快 由于输线较多 长距离传送时成本高且接收方的各位同时接收存在困难 串行通信 使用一条数据线 将数据一位一位的依次传输 每一位数
  • 1600*B. pSort(并查集)

    解析 并查集 将能够交换的位置相连 查看对应的位置能够交换 include
  • 面试题: Vue中的 computed 和 watch的区别

    computed computed看上去是方法 但是实际上是计算属性 它会根据你所依赖的数据动态显示新的计算结果 计算结果会被缓存 computed的值在getter执行后是会缓存的 只有在它依赖的属性值改变之后 下一次获取computed
  • 巧用 ChatGPT,让开发者的学习和工作更轻松

    引言 随着人工智能技术的快速发展和广泛应用 ChatGPT 作为一种新兴的自然语言处理模型 近期备受瞩目 引发了广泛讨论 ChatGPT 具有多种应用场景 既可以用作聊天机器人 实现智能问答和自然语言交互 也可以作为文本生成工具 帮助人们撰
  • html5中如何去掉input type date默认样式

    html5中如何去掉input type date默认样式 1 时间选择的种类 HTML代码 选择日期
  • 【初探DETR】安装环境

    windows下 需要环境 cython git https github com cocodataset cocoapi git subdirectory PythonAPI egg pycocotools torch gt 1 5 0
  • C# 实例详解委托之Func、Action、delegate(精品)

    概述 委托是 NET编程的精髓之一 在日常编程中经常用到 在C 中实现委托主要有Func Action delegate三种方式 本节主要就这三种委托的用法通过实例展开讲解 Func用法解析 Func Func是带返回值的委托 原型函数如下
  • 软件测试技术(性能与自动化测试)

    一 实验原理 1 功能与自动化测试 功能自动化测试是指使用自动化工具和脚本来模拟用户操作 验证软件应用程序的各种功能是否按照预期工作的过程 在进行功能自动化测试时 测试人员通常编写脚本 这些脚本可以模拟用户在应用程序中进行的各种操作 例如点
  • 【机器学习】12、主题模型

    文章目录 一 pLSA 二 LDA模型 一 pLSA 每个文档都会在主题上有一个分布 每个主题在各个词上也有一个分布 p w j
  • React中使用if else 条件判断

    在react中用jsx渲染dom的时候经常会遇到if条件判断 然而在jsx中竟是不允许if条件判断的 以下有几种判断方式 可以根据自己的应用场景 挑选适合的 方案一 class HelloMessage extends React Comp
  • QTableWidget获取选中的内容及所在行数

    QTableWidget选中所有单元格及取消选中所有单元格 ui gt allowSelectKeyTableWidget gt selectAll ui gt allowSelectKeyTableWidget gt setFocus i
  • 使用 Blender* 重新拓扑 VR 和游戏素材

    本文介绍如何将网格重新拓扑成一个整洁的低密度模型 然后 UV 解包该网格 以便将纹理贴添加至新模型 本文还将探讨如何使用免费工具 比如 Blender 及其 Bsurface 插件 重新拓扑雕塑的 3D 网格 查看详情
  • bootstrap3 表单构建器_如何快速构建基于MES的开源云平台

    导读本文为2019工业互联网平台活动盘点文章 同时也欢迎广大工业互联网平台企业参与本次盘点 具体参与方式可加编辑微信号 13517202453 详细咨询 随着智能制造转型战略的持续推进 MES作为承载智能化生产制造过程的核心系统正在受到越来
  • 正则表达式语法大全

    前言 一般开发中都会接触到正则表达式 作为一名合格的前端 也应该了解一下正则表达式编写原则 便于自己也能快速编写想要的正则表达式 1 作用 正则表达式是一种字符串匹配的模式 数据验证 比如电话号码 邮箱等 替换文本 快速找到特定文本 用于替
  • lua秒级睡眠和毫秒级睡眠(sleep, msleep)

    秒级睡眠 for linux cygwin or mingw function sleep n os execute sleep tonumber n end for windows function sleep n os execute
  • Transaction rolled back because it has been marked as rollback-only解决

    项目中遇到Transaction rolled back because it has been marked as rollback only错误 不要想 就是遇到了事物嵌套 即使你把所有方法上的 Transactional注解全部删除
  • cookie 设置中文

    在使用Django的时候需要将中文用户名写入cookie中 但是cookie的编码不支持中文 写入就会 UnicodeEncodeError latin 1 codec can t encode characters in position
  • 更好的在小学语课上用计算机,论多媒体技术在小学语文教学中的作用

    论多媒体技术在小学语文教学中的优势 作者 孖无悔观教育 论文格式范文 摘要 多媒体教学相比于传统的 黑板加粉笔 式的传统教学更具有优势 多媒体教学在小学语文课堂中的应用犹如清风活水 给教育注入了新的活力 它不但可以优化课堂结构 而且也让我们
  • java 匿名内部类简介说明

    转自 java 匿名内部类简介说明 下文笔者讲述Java匿名内部类的简介说明 如下所示 匿名内部类的简介 匿名内部类 未显式指定类名的内部类称之为 匿名内部类 匿名内部类创建 匿名类是不能有名称的类 所以没办法引用它们 须在创建时 作为ne
  • 关于element UI 中输入框禁止输入空格的实现

    关于element UI 中输入框禁止输入空格的实现 在项目开发过程中会遇到输入框禁止输入空格或者特殊字符之类的需求 其中禁止输入空格的实现方法如下所示 1 使用vue框架中的 trim修饰符