解决input事件监听拼音输入法导致高频事件

文章讲述了在业务场景中,如何通过监听compositionstart和compositionend事件来处理用户使用拼音输入法输入汉字时,确保在拼音输入完成后触发文本框的搜索接口。作者提供了JavaScript代码示例来实现这一功能。
摘要由CSDN通过智能技术生成

1、业务场景

在文本框中输入内容,执行查询接口,但遇到一个问题,当用拼音打字写汉字去搜索的时候,会输入一些字母拼成汉字,怎么能监听等拼音文字输入完成后再触发文本框监听事件
在这里插入图片描述

2、解决方案

通过查阅资料得知在输入中文(包括语音识别时)会先后触发compositionstart、compositionend事件,类似于keydown和keyup的组合。

触发compositionstart时,文本框会填入 “虚拟文本”(待确认文本),同时触发input事件;在触发compositionend时,就是填入实际内容后(已确认文本)。

先看看 compositionstart 的描述 和 compositionend 的 描述

compositionstart 事件触发于一段文字的输入之前(类似于 keydown 事件,但是该事件仅在若干可见字符的输入之前,而这些可见字符的输入可能需要一连串的键盘操作、语音识别或者点击输入法的备选词)。

compositionend 当文本段落的组织已经完成或取消时,会触发该事件。

3、具体实现

<div>
    <input type="text" class="input">
</div>
    <script>
        var inp=document.querySelector('input');
        let isComposite=false;//控制search()触发
        function search(){
            //接口开始查询
            console.log('搜索');
        }
        inp.addEventListener('input',function(){
            if(!isComposite){
            	settimeout(()=>{
               		search();
              	});
            }
        })
        inp.addEventListener('compositionstart',function (){
            console.log('start');
            isComposite=true;
        })
        inp.addEventListener('compositionend',function(){
            console.log('end');
            isComposite=false;
            //由于等待拼音字母输入结束后文本框输入事件则不监听了
            //所以在结束拼写监听中放search()
            search();
        })
    </script>
  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值