前端开发攻略---在输入框中输入中文但是还没选中的时候,搜索事件依然存在;中文输入法导致的高频事件。

ops/2024/9/23 9:37:16/

1、演示

解决前

解决后

2、输入框事件介绍

  • compositionstart事件在用户开始使用输入法输入时触发。这意味着用户正在进行组合输入,比如在中文输入法中,用户可能正在输入一个多个字符的词语。在这个阶段,输入框的内容可能还没有完全确定,因为用户可能在继续输入中。这个事件通常用于在输入法输入过程中进行一些特定的操作或者提供反馈。

  • compositionend事件在用户完成使用输入法输入时触发。这表示用户已经完成了组合输入,输入框的内容已经确定。在这个事件触发后,可以认为输入框中的内容是最终确定的。这个事件通常用于在输入法输入结束后执行一些操作,比如验证输入、提交表单等。

3、解决后的代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><input type="text" /></body><script>// 获取文档中的<input>元素const ipt = document.querySelector('input')// 定义一个搜索函数,用于输出搜索关键字到控制台function search() {console.log('搜索关键字:', ipt.value)}// 初始化一个变量用于跟踪输入是否在输入法组合状态中let isComposition = true// 监听<input>元素的input事件ipt.addEventListener('input', function () {// 在非输入法组合状态下触发搜索函数if (isComposition) {search()}})// 监听<input>元素的compositionstart事件,表示输入法开始组合文本ipt.addEventListener('compositionstart', function () {// 将isComposition标志设置为false,表示当前处于输入法组合状态isComposition = false})// 监听<input>元素的compositionend事件,表示输入法结束组合文本ipt.addEventListener('compositionend', function () {// 将isComposition标志设置为true,表示输入法组合状态结束// 然后触发搜索函数,因为输入法组合状态结束,输入文本已确认isComposition = truesearch()})</script>
</html>

4、代码解析 

  1. 获取页面中的 <input> 元素,并将其存储在变量 ipt 中。
  2. 定义了一个名为 search 的函数,该函数用于在控制台输出 <input> 元素当前的值,即搜索关键字。
  3. 初始化了一个名为 isComposition 的布尔变量,用于跟踪输入是否在输入法组合状态中。
  4. 通过监听 <input> 元素的 input 事件,当用户输入文本时,根据 isComposition 的状态来触发搜索函数。只有在非输入法组合状态下(即 isComposition 为 true)才会触发搜索函数 search()
  5. 监听 <input> 元素的 compositionstart 事件,当输入法开始组合文本时,将 isComposition 设置为 false,表示当前处于输入法组合状态。
  6. 监听 <input> 元素的 compositionend 事件,当输入法结束组合文本时,将 isComposition 设置为 true,表示输入法组合状态结束,并立即触发搜索函数 search(),以输出最终确认的输入文本。

这段代码可以确保在用户输入时能够正确处理输入法组合状态下的文本,并在确认输入后触发搜索操作。


http://www.ppmy.cn/ops/3680.html

相关文章

Elasticsearch(2)

目录 121.ES查询中match和term的区别? 122.Es查询中should和must的区别? 123.ES查询中match,match_phrase和match_phase_prefix有什么区别? 124.ES查询中什么是复合查询?有哪些复合查询方式?

深入刨析 mysql 底层索引结构B+树

文章目录 前言一、什么是索引&#xff1f;二、不同索引结构对比2.1 二叉树2.2 平衡二叉树2.3 B-树2.4 B树 三、mysql 的索引3.1 聚簇索引3.2 非聚簇索引 前言 很多人看过mysql索引的介绍&#xff1a;hash表、B-树、B树、聚簇索引、主键索引、唯一索引、辅助索引、二级索引、联…

【Web】陇原战“疫“2021网络安全大赛 题解

目录 CheckIN eaaasyphp EasyJaba CheckIN 拿到附件&#xff0c;贴出关键代码 func getController(c *gin.Context) {cmd : exec.Command("/bin/wget", c.QueryArray("argv")[1:]...)err : cmd.Run()if err ! nil {fmt.Println("error: ", …

桥接模式【结构型模式C++】

1.概述 桥接模式是一种结构型设计模式&#xff0c;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&am…

语言模型的发展

文章目录 语言模型的发展历程大语言模型的能力特点大语言模型关键技术概览大语言模型对科技发展的影响 语言模型的发展历程 一般来说&#xff0c;语言模型旨在对于人类语言的内在规律进行建模&#xff0c;从而准确预测词序列中未来&#xff08;或缺失&#xff09;词或词元&…

【无标题】PHP-parse_str变量覆盖

[题目信息]&#xff1a; 题目名称题目难度PHP-parse_str变量覆盖1 [题目考点]&#xff1a; 变量覆盖指的是用我们自定义的参数值替换程序原有的变量值&#xff0c;一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。 经常导致变量覆盖漏洞场景有&#xff1a;$$&…

JWT原理

为什么会有JWT的出现&#xff1f; 首先不得不提到一个知识叫做跨域身份验证&#xff0c;JWT的出现就是为了更好的解决这个问题&#xff0c;但是在没有JWT的时候&#xff0c;我们一般怎么做呢&#xff1f;一般使用Cookie和Session&#xff0c;流程大体如下所示&#xff1a; 用…

【LeetCode热题100】【动态规划】最长递增子序列

题目链接&#xff1a;300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 让dp[i]是以nums[i]为结尾的子序列的最长递增长度&#xff0c;遍历nums[i]之前的元素&#xff0c;如果有比nums[i]小的&#xff0c;说明递增子序列可以延申 class Solution { public:int le…