Vue的@input怎么做到不监听输入法拼音的?90%人不知道~

模拟面试、简历指导、入职指导、项目指导、答疑解惑可私信找我~已帮助100+名同学完成改造!

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~

背景

最近我的朋友去面某大厂前端岗位,被问到这么一个问题:vue 中怎么做到输入法输入拼音时不触发 @input 事件呢?

以前还真没留意过这件事情,毕竟大部分时间用 Vue 就是单纯地用来开发项目,哪会去关注他的一些细节呢?不过既然被问到了,那就趁机了解一下,也没坏处~

原生 input 事件

我们可以先抛开 Vue,先来看看原生的 input 事件,他是怎么的一个表现

有人说用防抖就能解决?但是防抖是解决不了这种情况的,防抖是减少触发频率的,而最终该触发啥还是得触发啥事件,不信我可以加一个防抖试试~

用户在输入拼音的过程中停顿了一下,拼音照样会被打印出来

Vue的@input事件

我们再来看看 Vue 的 @input 事件,看看表现是如何的

可以看到 @input 事件跟原生的 input 事件不同,@input 在输入拼音的时候并不会触发,而是最后得出输入法结果时才会去触发

咋做到的?

那么 Vue 到底是咋做到的呢?我们可以去 Vue 的源码中探寻,可以看到 Vue 内部是用了两个方法去处理

  • compositionstart
  • compositionend

我们可以去 MDN 上查查这两个方法到底是用来干啥的~可以看到你在输入需要合成的字符串时,会触发这两个回调函数。而我们输入法输入拼音时就是属于输入合成字符串的情况~

所以我们也可以利用这两个事件,去模拟实现一下 @input 的效果~

可以看到,当你输入法开始输入时,会触发compositionstart,当结束时会触发compositionend

所以我们只需要维护一个变量,去记录当前是否属于输入合成字符串期间,并且把这个变量当成 input 触发的条件即可~

这样就能达到我们想要的效果啦~

结语

我是林三心

  • 一个待过小型toG型外包公司、大型外包公司、小公司、潜力型创业公司、大公司的作死型前端选手;
  • 一个偏前端的全干工程师;
  • 一个不正经的掘金作者;
  • 逗比的B站up主;
  • 不帅的小红书博主;
  • 喜欢打铁的篮球菜鸟;
  • 喜欢历史的乏味少年;
  • 喜欢rap的五音不全弱鸡如果你想一起学习前端,一起摸鱼,一起研究简历优化,一起研究面试进步,一起交流历史音乐篮球rap,可以来俺的摸鱼学习群哈哈,点这个,有7000多名前端小伙伴在等着一起学习哦 --> 

广州的兄弟可以约饭哦,或者约球~我负责打铁,你负责进球,谢谢~

相关推荐

  • 阿里云史诗级崩溃。。。
  • GitHub 官方开源的字体集「GitHub 热点速览」
  • 上海人开始假装上班了
  • 面试突击:为什么要使用读写锁?它有哪些优势?
  • ChatGPT版iPhone终面世!Sam Altman联手苹果前员工祭出苹果杀手
  • 阿里云严重故障,阿里云、钉钉、闲鱼、淘宝、语雀等都崩了...
  • Kaggle知识点:检测 LLMs文本的方法
  • ​1112.AI日报:张朝阳谈 AI - 十年之内不能低估它,两年之内不能高估它
  • 项目总延期?需求乱插队?我们应如何做好项目管理
  • [开源]基于Go+Vue实现的OpenLDAP后台管理项目,简单易用清晰美观
  • 阿里云严重故障,阿里云、钉钉、闲鱼、淘宝、语雀等都崩了...
  • 一个指令,释放 1000 行屎山代码
  • 从ID-based到LLM-based:可迁移推荐系统发展
  • EMNLP 2023 | 基于知识图谱嵌入的关系感知集成学习算法
  • 开源跨平台终端仿真软件,多协议支持,个性化配置,无缝体验
  • 再看领域微调大模型的主流基座和评测数据集:项目地址及论文指引
  • Windows 全新虚拟机发布!
  • 分享图片
  • 成都周报 | 华微电子即将上市,7家企业获得投资
  • 为什么王者荣耀不使用微服务架构?