> 文档中心 > input监听输入中文和英文的问题

input监听输入中文和英文的问题


项目场景:

        程序中一个功能为输入框输入时,根据实时输入对树形结构内的数据进行搜索。


问题描述:

        问题在于树形结构数据量较多,由于使用的keyup事件,导致一次输入多个英文时,或者键盘输入中文及按Shift时每输入一个字母触发一次,导致输入时卡顿,需优化此问题。

原代码:

$("input[name='searchTree']").on("keyup",function(){changeDefaultCheck();var _self = $(this);$('#tree').tree('search',_self.val());});


解决方案:

        输入时,需判断输入内容是英文,还是中文,如用输入法输入中文则需要在选定中文之后再触发查询逻辑,查阅资料得知可以使用compositionstart、compositionend事件。

修改后代码为:

var flag = true;$("input[name='searchTree']").on('compositionstart',function(){    flag = false;})$("input[name='searchTree']").on('compositionend',function(){flag = true;})$("input[name='searchTree']").on('input',function(){var _self = $(this);setTimeout(function(){if(flag){changeDefaultCheck();$('#tree').tree('search',_self.val());}},0)})

中间出现问题为页面报错

 原因为$(this)未取到值,注意$(this)需要在setTimeout外面

需设置setTimeout,为了使compositionend事件滞后于input事件

参考于:

input、compositionstart、compositionend事件实现百度搜索框的实时性_未来以来 futureToday-CSDN博客_input start事件

input输入中文时,拼音在输入框内会触发input事件的问题。 - 游龙翔隼 - 博客园