Vue element el-input输入框 实现 ’空格+enter’组合键:换行,enter:发送,使用keydown和keyup键盘事件来实现

news2024/12/25 10:28:11

需求

在这里插入图片描述

输入框 ,输入内容后 ,按enter+空格键 换行,按enter键 发送调取接口

思路

jquery的也分为三个过程,在事件名称上有所不同

1、某个键盘的键被松开:keyup
2、某个键被按下:keydown
3、某个键盘的键被按下或按住:keypress

  1. 首先, 给el-input框绑定两个事件(鼠标按下) keydown和鼠标抬起keyup
  2. 用这两个事件来监听键盘按键情况。
  3. 定义两个全局变量 isSpace和isEnter,默认为0,用来判断 按键状态
  4. 获取keyCode代码后,把根据keyCode的值,判断是按了哪个键,赋值给一个对应的 isSpace和isEnter变量,然后再使用,该事件结束后再置为0;
  5. enter键中 else里面,使用 event.preventDefault(),阻止input框默认的换行事件
    (这一步可根据自己的项目需求进行修改,因为我在项目里使用了 el-input 自适应文本高度属性
    默认按enter会有换行效果,所以这里使用 event.preventDefault();阻止默认事件)

完整代码

 <el-input clearable autosize 
           type="textarea" 
           :placeholder="$t('navbar.pleaseInput')"
           v-model="inputText" 
           @keydown.native="inputChange" 
           @keyup.native="inputClick" />
 data() {
        return {
            isSpace: 0,
            isEnter: 0
        };
    },
methods(){
   inputClick(event) {
            // 获取按下的键的键值
            const keyCode = event.keyCode || event.which;
            if (keyCode == 13) {
                this.isEnter = 0
            }
            if (keyCode == 32) {
                this.isSpace = 0
            }
        },
        inputChange(event) {
            // 获取按下的键的键值
            const keyCode = event.keyCode || event.which;
            if (keyCode == 13) {
                this.isEnter = 1
            }
            if (keyCode == 32) {
                this.isSpace = 1
            }
            if (this.isSpace == 1 && this.isEnter == 1) {
                console.log('空格+Enter 键被按下!')

            } else if (this.isEnter == 1) {
                console.log(this.isSpace, this.isEnter, '走enter')
                this.inputAdd() //调用发送方法
                event.preventDefault();//因为使用了 el-input 自适应文本高度,
                //默认按enter会有换行效果,所以这里使用  event.preventDefault();阻止默认事件,可根据自己的项目需求进行修改
            }
        },
  }

额外补充小知识

el-input无法绑定键盘事件?浅析.native修饰符的作用与原理

native介绍

我们在使用vue进行开发时,会有很多不同的组件,它们作为一个个标签填充在template模板中,你是否想过,这些组件既然是标签,那么它们能否监听html标签的各种事件呢?

结果是不能,原因在于这些组件虽然看上去和html标签一样,用法也和html标签一样,但实际上,它们只是子组件中真实html标签的一个载体而已,并不存在于真实dom中,既然不存在于真实dom中,那么当然也不能监听html标签的原生事件啦。

针对这种情况,Vue给我们提供了一个事件修饰符:.native ,它允许我们在自定义的组件标签中添加原生的DOM事件。

<template>
  <div>
    <!-- 组件直接绑定click事件,Vue会把click视为一个自定义事件 无法通过点击触发 -->
    <MyComponent @click="handleClick()"></MyComponent> 
    <!-- 添加.native事件之后,Vue就可以识别出来这是一个原生的DOM事件:click事件 -->
    <MyComponent @click.native="handleClick()"></MyComponent> 
  </div>
</template>

el-input为什么无法绑定键盘事件?

因为:el-input 标签其本质上是一个组件。

我们给 el-input 添加@keydown事件时,keydown只能被解析为自定义事件,我们需要通过$emit手动触发该事件的回调函数才行。

而.native修饰符,就是为了这种情况而出现的,当我们使用了此修饰符后,vue会帮我们给组件的根标签添加一个事件监听器,我们便可以正常使用该事件了。

所以解决方法就是

:在el-input绑定@keydown事件时,添加.native修饰符即可。

同理,其他的element组件也是可以用这个方法来绑定原生DOM事件的。也许你还有疑问:那为什么的@click事件就不用.native 修饰符呢?

答案也很简单,因为人家在创建组件时就为里面的标签绑定了一个click事件,相当于是官方提前为我们准备好了一个click接口,我们看似是在调用原生js的click事件,实际上是在调用element官方为我们提前准备好的方法。

总结

el-input 本质是一个组件,所有组件都无法直接绑定原生DOM事件,elementUI可以直接写click等原生事件其实是因为ele官方为我们提前预置了一些相关事件。(没有预置的我们就无法直接绑定相关事件了,正如 没有预置keydown事件)
想要为组件标签绑定原生DOM事件,需要用到 .native 修饰符,其原理是Vue内部为组件的根标签中绑定了一个事件侦听器。
.native是Vue官方专门为组件标签准备的语法,所以 .native 不能用在 非组件标签 上,否则会引发 warn 警告,并且该事件会失效。
在这里插入图片描述

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

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

相关文章

基于查找表(lookup table,LUT)方法反演植被参数

LUT指显示查找表&#xff08;Look-Up-Table)&#xff0c;本质上就是一个RAM。它把数据事先写入RAM后&#xff0c;每当输入一个信号就等于输入一个地址进行查表&#xff0c;找出地址对应的内容&#xff0c;然后输出。 LUT的应用范围比较广泛&#xff0c;例如&#xff1a;LUT(Lo…

机器学习:Self-supervised Learning for Speech and image

review : self-supervised learning for text Self-supervised learning for speech 使用Speech版本的bert能比较好的作用于语音任务上&#xff0c;如果没有self-supervised的话&#xff0c;别的模型可能需要上万小时的数据。 Superb ytb课程&#xff1a;MpsVE60iRLM工具&…

vulnhub打靶--lampiao

目录 vulnhub--lampiao1.扫描主机端口&#xff0c;发现1898端口部署web2.打开robots.txt发现CHANGELOG.txt文件3.发现drupal更新日志&#xff0c;drupal这个版本有公开exp。利用msf打下4.执行uname -a 或者上传漏洞suggest脚本&#xff0c;可以发现有脏牛提权5.上传脚本到目标&…

2023年7月19日,锁升级,网络编程

锁升级 锁的四种状态&#xff1a;无锁、偏向锁、轻量级锁、重量级锁&#xff08;JDK1.6&#xff09; 无锁&#xff1a;操作数据时不会上锁 偏向锁&#xff1a;会偏向于第一个访问锁的线程&#xff0c; 如果在运行过程中&#xff0c;只有一个线程访问加锁的资源&#xff0c;不存…

JavaWeb+Vue分离项目实现增删改查

文章目录 前言数据库后端代码util 代码listener 代码filter 代码po 代码dao 层增删改查代码service 层增删改查代码controller 层增删改查代码 前端代码查询操作删除功能增加功能修改方法路由传参修改会话存储修改 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&…

Java037——多线程

当涉及到计算机操作系统中的并发执行时&#xff0c;进程和线程是两个核心概念。 一、程序(program) 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码&#xff0c;静态对象。 二、进程&#xff08;Process&#xff09; 进程&#xff0…

MD5数据加密方法

什么场景需要使用数据加密呢&#xff1f;比如秘密数据传输、用户密码加密存储等等 数据传输可使用密钥对的方式进行加密解密&#xff0c;使用签名方式验证数据是否可靠&#xff0c;而密码加密存储可使用MD5等一些算法对数据进行单向加密 一、MD5单向加密 1、百度说法&#x…

【基础统计学】带重叠差分置信区间的检验

一、说明 对于统计模式识别&#xff0c;需要从基本的检验入手进行学习掌握&#xff0c;本篇是对统计中存在问题的探讨&#xff1a;如果两个分布有重叠该怎么做。具体的统计学原理&#xff0c;将在本人专栏中系统阐述。 二、几个重要概念 2.1 什么是假设检验 假设检验是一种统计…

第二节 C++ 数据类型

文章目录 1. 概述1.1 数据类型的重要作用 (了解) 2. 数据类型2.1 什么是进制 ?2.1.1 存储单位 2.2 整数类型2.2.1 整数类型使用2.2.2 超出范围2.2.3 关键字 sizeof 2.3 实型(浮点型)2.3.1 setprecision()函数2.3.2 科学计数 (了解即可) 2.4 字符型2.4.1 字符型定义2.4.2 ASCII…

树-用Java托举

再讲完前面几个数据结构后&#xff0c;下面&#xff0c;我们开始对树进行一个讲解分析 树 引言 树是一种重要的数据结构&#xff0c;在计算机科学中有着广泛的应用。树是由节点和边组 成的非线性数据结构&#xff0c;具有层次结构和递归定义的特点。每个节点可以有多个子 节点…

【英杰送书第三期】Spring 解决依赖版本不一致报错 | 文末送书

Yan-英杰的主 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 问题描述 报错信息如下 报错描述 解决方法 总结 【粉丝福利】 【文末送书】 目录&#xff1a; 本书特色&#xff1a; 问题描述 报错信息如下 Description:An attempt…

Docker 命令(二)

查看 docker 版本信息 docker version #查看版本信息docker 信息查看 docker info Client:Context: defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)Server:Containers: 0 …

get请求传入[ ]这类字符 返回400错误解决

问题描述 使用get请求查询&#xff0c;传入特殊字符 []时&#xff0c;接口报错。 分析原因 高版本的tomcat&#xff0c;有个新特性&#xff1a; 严格按照RFC 3986规范进行访问解析&#xff0c;而 RFC3986规范定义了Url中只允许包含英文字母&#xff08;a-zA-Z&#xff09;、数…

【Python】数据分析+数据挖掘——Pandas中文件I/O操作

文章目录 前言1. 读入文本格式数据文件1.1 pd.read_csv实例 1.2 pd.read_table1.3 pd.read_excel实例 1.4 pd.read_sql 2. 保存数据文件2.1 保存数据文件到外部文件中2.2 保存数据文件到数据库中 结束语 前言 在数据分析和数据挖掘中&#xff0c;数据通常以文件的形式存储在磁…

静电消除风机风棒的工作原理

静电消除风机风棒的工作原理静电消除离子风机是一种专门用于消除静电的设备。静电是由于物体表面带有静电荷而引起的现象&#xff0c;容易导致尘埃吸附、静电放电等问题。静电消除离子风机通过释放负离子或正离子来中和空气中的静电荷&#xff0c;从而减少静电问题的发生。 静…

【基于CentOS 7的Rsync服务】

目录 一、概述 二、特性 1.快速 2.安全 3.应用场景 三、数据的同步方式 1.pull 2.push 四、rsync传输模式 1.本地传输 2.远程传输 3.守护进程 五、rsync应用 1.安装 2.监听端口 六、rsync命令 1.格式 1.1 作为远程命令 1.2 作为rsync服务 2.选项 3.举例 …

服务器数据恢复-ESX SERVER无法连接到STORAGE的数据恢复案例

服务器数据恢复环境&#xff1a; 某公司信息管理平台&#xff0c;数台VMware ESX SERVER虚拟机共享一台IBM某型号存储。 服务器故障&#xff1a; VC报告虚拟磁盘丢失&#xff0c;管理员ssh到ESX中执行fdisk -l命令查看磁盘&#xff0c;发现STORAGE已经没有分区表了。重启设备后…

2023-7-20-第二十一式访问者模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

unity预制体打包

unity做好的预制体如果给别的工程使用&#xff0c;如果是单纯的ctrlcv会导致丢失引用&#xff0c;如材质信息等&#xff0c;我们可以将其打包好再导入给别的工程。 如打包这个cube&#xff1a; 点击Export&#xff0c;选择保存位置

【算法基础:搜索与图论】3.2 树与图的dfs和bfs

文章目录 例题846. 树的重心&#xff08;深度优先遍历 / 树形DP&#xff09;⭐⭐⭐⭐⭐&#x1f6b9;&#x1f6b9;&#x1f6b9;&#x1f6b9;&#x1f6b9;&#xff08;重要&#xff01;好题&#xff01;&#xff09;847. 图中点的层次 相关链接 要学会建树、建图的通用方法。…