input框输入中文时,输入未完成触发事件。Vue中文输入法不触发input事件?

VUE扫码枪中文输入法兼容自动回车事件(上) vue框架下面的扫码枪,针对windows+搜狗中文输入法兼容性问题处理方案 阅读详情
AI摘要

文章讲述了在Vue应用中处理中文输入时,如何实现实时搜索并区分拼音输入和完成后的中文输入。通过compositionstart和compositionend事件检测拼音输入状态,以及在Vue3中v-model的事件处理机制,避免在中文输入过程中触发change事件。

前言

在做搜索输入框时,产品期待实时搜索,就是边输入边搜索,然而对于中文输入法出现的效果,不同的产品可能有不同的意见,有的觉得输入未完成也应该触发搜索。但有的却认为应该在中文输入完成后再触发搜索。我发现在vue中通过v-model绑定的输入框的值,确时正常的,在中文输入未完成的时候不会修改value的值。针对这两种情况,分别做了屏蔽输入过程的change事件和vue中触发change事件。毕竟不同的需求有不同的效果,为了满足各种情况,还是都掌握的好。

如何屏蔽中文输入过程的change事件

在输入拼音过程也会触发input事件,效果如下图:
在这里插入图片描述
在输入中文时,拼音输入法会先显示拼音,然后在选定一个拼音后,才把真正的汉字显示在输入框里。默认情况下,输入框的 input 事件会在拼音输入时就触发,这可能会导致一些不希望的情况。

为了解决这个问题,可以使用 compositionstart 和 compositionend 事件来检测是否拼音输入中。在拼音输入中,设置一个标志(例如 isComposing),表示正在进行拼音输入。然后,在 input 事件中,你可以检查这个标志,如果正在拼音输入,就不触发 input 事件的处理,直到拼音输入结束,你才处理最终的字符输入。

这个方法就像是在输入之前检查你是否正在输入拼音,如果是,就等拼音输入完了再处理最终的文字输入,以避免不必要的 input 事件触发。

示例
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>中文输入法拼音输入示例</title>
</head>
<body>
  <input type="text" id="textInput" oninput="onInput(event)" placeholder="oninput" />

  <script>
    let isComposing = false;
    const input1 = document.getElementById('textInput');
    console.log("111111", input1)
    input1.addEventListener('compositionstart', e=>{
      console.log("监听开始");
      isComposing = true;
    })
    input1.addEventListener('compositionend', e=>{
      console.log("监听结束", );
      isComposing = false;
      const value = e?.target?.value;
      // 处理
      console.log("最终的值是:", value)
    })
    const onInput = (e)=>{
      
      setTimeout(()=>{
        if(!isComposing)
        console.log("输入完成了", e?.target?.value)
      },0)
    }
  </script>
</body>
</html>

在这里插入图片描述

  • compositionstart 事件:当用户开始使用输入法输入中文拼音时,这个事件会触发。在这个事件触发时,通常会显示拼音输入的提示或候选项。

  • compositionend 事件:当用户完成拼音的选择,输入法将真正的中文字符显示在输入框中时,这个事件会触发。这表示拼音输入结束,真正的字符已经确定。

如何解决vue中文不触发change事件

然而在vue中却是解决过此问题的,比如我有如下代码,input绑定value,watch监听value的变化,然后打印出value。我这里是vue3

<template>
  <div>
    <input v-model="value" />
  </div>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue';
const value = ref('');
watch(value, (value) => console.log('输出value', value));
</script>

控制台输出如下:
在这里插入图片描述
如果你做的功能类似百度或者谷歌搜索就算是中文输入法,在输入的过程中也触发input事件,此时也需要去解决这个问题。
然而这个代码也就使用了v-model,又在官网上看到,v-model等同于:value+@input。那就试一试这个
在这里插入图片描述
然而将代码替换之后,效果就出来了,哈哈哈皆大欢喜,问题解决了
在这里插入图片描述
为什么会这样呢,看一下源码,
Vue 3 源码仓库:https://github.com/vuejs/vue-next

在这里插入图片描述
分析
根据提供的 Vue 3 的 vModel 源码,确实没有处理中文输入过程中的 change 事件,这是因为Vue 3 为了提高性能和减少不必要的事件触发,采取了一种更精细的事件处理策略。具体来说:

  1. vModel 指令在 created 钩子中监听了 input 事件,而不是 change 事件。这是因为 input 事件更加实时,而 change 事件通常在输入框失去焦点时触发。所以 vModel 更关注实时的文本输入变化。

  2. 在处理 input 事件时,源码中通过检查 (e.target as any).composing 来避免在中文输入法输入过程中触发事件。这是因为在中文输入法输入时,文本可能会在用户还未完成输入时进行多次变化,如果每次都触发 input 事件可能导致性能问题。因此,只有当输入法输入完成时,才手动触发 input 事件。

具体来说,这段代码:

addEventListener(el, lazy ? 'change' : 'input', e => {
  if ((e.target as any).composing) return
  // ...
})

使用 (e.target as any).composing 来判断是否正在中文输入法的“组合”过程中,如果是,就不处理事件,直到输入法输入完成。这是为了避免不必要的事件触发。

中文输入过程是否需要触发事件,这个都是看需求怎么定,不同的场景有不同的需要,所以也不能算bug吧,但是作为程序员,问题总该要解决的。

VUE3 之 键盘事件 目录 1. 概述 2. 键盘事件 3. 综述 4. 个人公众号 1. 概述 老话说的好:宁愿自己吃亏,也不让他人吃亏。 言归正传,今天我们来聊聊 VUE3 的 键盘事件。 2. 键盘事件 2.1 敲击任意键触发事件 <body> <div id="myDiv"></div> </body> <script> const app = Vue.createApp({ // 创建一个vue应用实例 阅读详情

相关推荐

解决扫码枪因输入法中文导致的问题

最近公司项目上遇到了扫码枪因搜狗/微软/百度/QQ等输入法在中文状态下,使用扫码枪扫码会丢失字符的问题。

Perback的博客 3421

输入框的三种触发事件

输入框的几种触发事件对比

头发丝儿还在的博客 7014

ch32v103xx 烧写

烧写方式 串口uart, usb,swd(wch link)但不建议按此使用,参官方说明。

qq_39239990的博客 637

解决input中输入中文过程中会触发input事件的问题

当文本段落的组成完成或取消时,compositionend 事件将被触发 (具有特殊字符的触发,需要一系列键和其他输入,如语音识别或移动中的字词建议)。(即输入法编辑器)开始新的输入合成时会触发 compositionstart。通过查阅资料得知在输入中文(包括语音识别时)会先后触发。时,文本框会填入 “虚拟文本”(待确认文本),同时触发。选词完成后触发input事件,只触发一次。时,就是填入实际内容后(已确认文本)。

知秋 4171

spm FMRI 各种小问题合集

预处理 1、预处理结果从normalize之后开始头歪、变形 问题描述:如下图 原因:DICOM2NIfTI时必须检查对应的T1像。下面是两种错误形式,第一种容易发现,第二种容易忽视,大脑失状位左右颠倒。 解决:重新转了一回格式,建议用SPM fmri进行格式转换。之前是用MRIconvert转换的,用了两台电脑,有的T1结果是对的,不确定什么原因产生的错位,操作都是一样的。 2、Check reg大脑图片边缘出边框 问题描述: 原因:应该是图片排版导致的,单独check就会发现大脑是全的。 解决

weixin_44669441的博客 1677

YOLOv5算法改进(22)— 更换主干网络MobileNetv3 + 添加CA注意力机制

本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络MobileNetv3 + 添加CA注意力机制),小白必学~!🌈

小哥谈 2816

vue 输入框验证

1.邮箱验证: validator: (rule, value, callback) => { if (value === '') { callback(new Error('请正确填写邮箱')); ...

m0_37727198的博客 1632

【数据分析】基于多组学数据整合的微生物与宿主互作网络构建及可视化分析

综上所述,本教程通过详细的步骤和方法,展示了如何整合微生物群落数据、宿主基因表达数据和代谢组数据,构建微生物与宿主互作网络,并进行可视化分析。这种方法为研究微生物与宿主之间的复杂关系提供了一种有力的工具,有助于推动相关疾病的研究和治疗。然而,在实际应用中,需要注意数据处理和分析过程中的各种问题,并结合实验验证来提高研究结果的可靠性和科学性。未来,随着多组学技术的不断发展和完善,以及数据分析方法的创新,相信我们能够更深入地理解微生物与宿主之间的互作机制,为疾病的预防、诊断和治疗提供更有力的支持。

专注生信领域 370

好烦,怎么输入拼音的过程也会触发input事件!!!

🎈input输入框大家应该都很熟悉了吧,不知道大家有没有遇到过这样的一种情况:如上图,在中文输入过程中,输入的拼音也会触发input框的input事件,有些时候我们并不希望在中文输入的过程中拼音触发input事件。 在日常开发中,输入框是一个常见的组件,但是在拼音输入过程中,每次输入都会触发input事件,这可能会导致不必要的操作。本文将介绍一种解决该问题的Vue指令,使得在拼音输入过程中不会触发input事件,从而优化输入框体验。

Twinkle_sone的博客 2839

RT-DETR的AIF模块+YOLOv8:融合注意力与特征交互,打造实时检测的科研级进阶方案

从理解AIF模块“细粒度注意力+跨尺度交互”的核心设计,到亲手将其嵌入YOLOv8并验证在复杂场景的表现,再到基于此探索属于自己的科研与工程方向——这个过程能让你深刻理解“注意力机制与CNN融合”在实时检测中的核心价值。现在就开始行动,相信你会在实时目标检测的“智能进化”之路上,走出一条属于自己的技术路径。从实验对比图可见,集成AIF模块的YOLOv8,其mAP(平均精度)在多个阈值下均有提升,尤其是mAP50-95(高IoU阈值下的精度)提升更为显著,充分证明了AIF对细粒度特征的捕捉能力。

m0_64661770的博客 188

015、架构_配置文件_管理节点(proxymanager.ini)

该配置文件中的参数在后台配置,两种生效方式:*所有参数重启生效。*部分参数可以使用工具dbtool动态生效。动态生效命令为:dbtool-pm-load-config。配置文件“proxymanager.ini”用于设置元数据管理模块的信息。文件路径为“~/etc”。配置文件“proxymanager.ini”是普通的文本文件。默认值proxymanager-alarmconfutf8.txt。配置错误或不配置,PM无法连接MDS,无法服务。获取元数据失败超时处理时间。异常时请求启动对等回滚。

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 329

vue中解决模糊搜索输入中文时--未输入完成时触发input事件

在给输入框绑定input或keydown事件时预期效果是有输入法时,输入中文后触发事件,不希望输一个字母就触发一次事件 可以用到compositionstart,compositionend。 主流浏览器都兼容 我们可以看下官方定义: 根据规范,Composition 事件触发顺序如下: 输入开始时触发compositionstart 选择字/词完成输入时触发composition...

h841440416的博客 6467

在armv8架构中,有哪些是serror

(3)、RAS(Reliability, Availability, and Serviceability)错误:一些对于系统的可靠性、可用性和可维护性有影响的错误可能会触发 SError。(2)、ECC(Error Correction Code)错误:在访问带有错误校验的内存(如ECC内存)时,如果发现错误校验失败,可能会产生SError。2、其实呢,大多数Serror都是实现定义的,真正实现的serror就没有多少个。Serror(也称System Error),是异步异常的一种,一般是来自。

baron-周贺贺-代码改变世界ctw 1013

VUE:原生input进行中文输入时触发的事件

原生input框在输入中文时触发的两个不常见事件:compositionstart、compositionend

干饭搬砖两不误。 1457

LSTM在DNA序列分析中的应用:生物信息学的探索

长短期记忆网络(LSTM)是循环神经网络(RNN)的一个变种,旨在解决RNN在长序列数据中出现的梯度消失和梯度爆炸问题。LSTM通过引入“记忆单元”和三个门(输入门、遗忘门和输出门)来有效捕捉长距离依赖关系。这使得LSTM在处理DNA序列等时间序列数据时具有优势。LSTM在DNA序列分析中展现了强大的能力,能够捕捉复杂的序列特征,并提供高效的解决方案。本文从LSTM的基本原理、DNA序列特性、模型构建、训练过程到实际应用进行了详细阐述。

斌擎科技 749

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

输入一个字符触发三次input事件,你不知道的JavaScript composition Event

情景描述   在做项目时第三方接口返回内容为按某固定分割符拼接的一个长的字符串,需要自己拆分每一项。正好最近在学Vue3,为了方便看每项内容打算写个拆分的前端脚本。 事件描述   脚本打算不使用确定按钮完成拆分,用input事件完成自动拆分。在测试input事件的时候,突然发现一个神奇的现象。输入一个数字1结果调用了三次方法,当时整个人都懵了。发生了什么??? 问题描述   为了解决这一问题各种上网搜索办法,又各种测试,最后发现问题:我用了中文输入法,切换到英文输入法就不会这样。然后又是一脸懵,这和中英

qq_46115413的博客 5225

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

为什么输入拼音的过程也会触发input事件,大无语!

然后,我们比较value和输入框的当前值el.value是否相等,如果不相等,则说明输入框的值已经发生了变化,此时我们调用binding.value方法,将当前输入框的值el.value作为参数传递给绑定该指令的处理函数。在事件触发时,会执行回调函数。具体实现方式是,在监听到compositionstart事件时,将输入框的值存储下来,然后在监听到compositionend事件时,再将输入框的值与之前存储的值进行比较,如果不同,则触发自定义的input事件,并将新值作为参数传递给监听器。

QD_ANJING的博客 1606

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

移动浏览器,使用VUE时, input 输入的文字不断消失,绑定 composition事件可解决。

当时发生问题时vue的版本是2.5.17,发现input框没有绑定composition事件,后来将vue升级到2.6.10就解决了。主要是查看一下input框有没有绑定compositionend和compositionstart事件 CompositionEvent CompositionEvent触发的时候就是在文本合成系统,换句话说就是在使用输入法输入中文的时候会触发它的三个事件(com...

trenki的博客 3405

v-model 处理 中文 输入法时 和 @input :value 的区别

你或许会说 没什么区别,就是@input :value 的 语法糖,最多就是 处理的逻辑多了一点 但是 看一下截图中 箭头 所指的地方 // 看一下指令插入的地方 inserted (el, binding, vnode, oldVnode) { if (vnode.tag === 'select') { // #6903 if (oldVnod...

dongcehao的博客 1455

使用中文输入法时,输入框会在用户输入拼音但未选择最终汉字时触发 `input` 事件,解决方案

在前端开发中,使用中文输入法时,输入框会在用户输入拼音但未选择最终汉字时触发 `input` 事件,这可能导致高频事件触发。

2301_80649723的博客 790

vue input 中文输入法回车

vue input 中文输入法回车 <input type="text" class="tc-15-input-text" placeholder="请和Bot进行聊天" v-model="cilentText" @keydown.13="doInputText" @keydown.229="() => {}"> 中文输入法时所有的键盘按钮触发的 keydown 事件 key...

GreekMrzzJ的博客 1万+

uniapp-vue页面input输入框在ios系统下用中文输入法输入字母获取不到值的问题

input输入框在ios系统下用中文输入法输入字母v-model绑定变量获取不到值得问题,在app端下nvue页面没有这个问题,vue页面、H5端会出现这个问题,下面以uniapp官方演示项目为例说明: 注意看 实时获取输入值 这一行,预期效果为 输入框输入字符以后 标题视图实时变更为输入值,但是在ios下用中文输入法输入字母不会引发v-model绑定值同步更新事件。经测试,在苹果手机下用中文输入法输入中文没有问题,但是输入字母的话就会产生这个BUG,造成提交表单时视图层看到的数值和实际逻辑层提交的数值不一

xiwangkeji1007的博客 3210

vue中input框只能输入数字

问题描述:在vue的input框只能输入数字,如电话号码等 实现代码: <label>电话号码:</label> <input type="number" v-model="tel\" placeholder="请输入" oninput="if(value.length>11)value=value.slice(0,11)" @keydown="checkInput($event)"> 其中: 1、type="number"限定只能输入数字,但可以是小数

weixin_43972493的博客 6310

《处理 iOS 中文输入法拼音输入阶段的 input 事件问题》

本文探讨了在Web开发中处理中文输入法(IME)复合输入阶段的技术方案,特别是在iOS系统中的特殊表现。通过分析compositionstart和compositionend事件机制,提出了一种优雅的解决方案:使用标志位isComposing区分拼音输入和最终确认阶段,并结合pendingValue处理iOS特有的事件顺序问题。文章还给出了优化后的兼容版本代码,以及需要注意的防抖函数结合、多输入法兼容等扩展事项,为开发人员提供了处理中文输入场景的实用参考方案。

前端码农的博客 906

input输入框监听输入的正确姿势

本文针对前端开发中常见的input输入处理需求,提出了一套完整解决方案。首先通过防抖函数减少频繁触发,然后利用composition事件解决中文输入法干扰问题。文章详细展示了原生JS和Vue两种实现方式,核心思路是:1)使用防抖控制执行频率;2)通过compositionstart/compositionend事件识别中文输入状态;3)仅在非中文输入或中文输入完成时触发业务逻辑。该方案有效解决了性能问题和中文输入兼容性问题,适用于搜索联想、表单校验等场景。

brilliantSt的博客 986

input 事件兼容处理以及中文输入法优化

移动端 js input事件如何解决输入汉字时,拼音在输入框内也会触发input事件

拿笔小星的博客 1万+
上一篇: useReducer+createContext真的可以代替Redux吗?
下一篇: canvas常用方法,canvas绘制时钟案例
heiyay
博客等级 码龄8年 617粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值