移动APP 中文输入法下的搜索优化

最近做了一个移动端的搜索功能,带有suggest。实现上并没有什么可说的,但是在后续优化上,特别是在中文输入法的情况下的优化使我学到一些新东西,所以决定写一篇文章。

下面是我简化后的基本功能实现,监听输入框的input事件,当搜索框有输入时,根据输入内容和后端进行交互提供suggest,再监听keyup的事件,当用户敲击回车的时候,就进行一次搜索。注意其中suggest和search是两个自定义事件,并非原生事件。我们在实际生产环境里应该给自定义事件加上特殊前缀。

$(‘#searchInput‘)
.on(‘input‘, function() {
    $(this).trigger(‘suggest‘);
})
.on(‘keyup‘, function(e) {
    var isEnterKey = e.keyCode === 13;
    if(isEnterKey) {
        $(this).trigger(‘search‘);
    }
})
.on(‘suggest‘, function() {
    ...
})
.on(‘search‘, function() {
    ...
})

做到这一步,基本功能就可用了。然后我们可以考虑做一些优化,优化点就是减少和后端非必要的的交互,我们一般有如下措施:

1.ajax缓存
2.trim操作防止空格产生的input事件
3.用time delay来优化用户输入过快频繁和后端发生的suggest询问
4.当用户当前输入法状态是中文时,在未选择词组到输入框之前不和后端进行任何交互
5.中文输入法状态下回车是将输入的字母填入输入框中,这时的回车不进行搜索

接下来我会就说说我对第4、5条的优化的实现。当我们把输入法切换为中文,然后进行输入,这种情况下还是会触发input事件,即便我们还没有选择词组。我们想要的结果是只有词组进入了输入框才向后端发起suggest询问。我们可以使用两个较新的事件来达到预期的效果:compositionstart和compositionend。

compositionstart
当浏览器有非直接的文字输入时, compositionstart事件会以同步模式触发.

compositionend
当浏览器是直接的文字输入时, compositionend会以同步模式触发.

上面是MDN上的解释,我也是第一次接触到上述事件。

$(‘#searchInput‘)
.on(‘compositionstart‘, function() {
    $(this).data(‘notEnglishInputMethod‘, true);
})
.on(‘compositionend‘, function() {
    $(this).data(‘notEnglishInputMethod‘, false);
})

然后我们可以通过$(‘#searchInput’).data(‘notEnglishInputMethod’)来判断是否触发suggest。在input事件里加上这个条件。

$(‘#searchInput‘).on(‘input‘, function() {
    if(!$(this).data(‘notEnglishInputMethod‘)) {
        $(this).trigger(‘suggest‘, value);
    }
})

这样我们的第4个问题总算解决了,现在中文输入法下敲击键盘不会进行suggest,直到选择了词组。还剩下第5个问题,在中文键入拼音展现可选词组的状态下回车不进行默认的搜索功能。

即便当前是中文输入法,我们的keyup事件同样会被触发。我试了半天都没找到很好的解决办法,后来我发现中文输入法事件下keydown事件里面所有按键的keyCode都等于229,于是我们可以通过这个差异来解决这个问题。我们给输入框再绑定一个keydown事件,并把当前的keyCode保存起来,然后在keyup事件里面来作比较,如果两者相等,基本可以确实是在直接输入的状态下,不相等则表示是在非直接输入的情况下,也就是中文输入法情况下。Show you the code!

$(‘#searchInput‘)
.on(‘keydown‘, function(e) {
    $(this).data(‘lastKeydownCode‘, e.keyCode);
})
.on(‘keyup‘, function(e) {
    var isEnterKey = e.keyCode === 13;
    if(isEnterKey && e.keyCode === $(this).data(‘lastKeydownCode‘)) {
        $(this).trigger(‘search‘);
    }
})

通过上述的方法,我们基本上解决了中文输入法搜索带来的问题。希望能对你有小小的帮助。

文档来源:http://leechan.me/?p=1768

时间: 2024-08-22 16:22:29

移动APP 中文输入法下的搜索优化的相关文章

输入框文本输入限制问题以及中文输入法下字符阶段的处理

输入框文本字数限制问题以及中文输入法下字符截断处理 上次博文写过处理实时获取输入表单的值,传送门: 博文地址.这次又需要处理输入框文本字数限制问题,前期的步骤思想其实就是要先实时获取输入框的值然后得到长度. 使用onkeyup判断字符长度 可以参考我前面写的博文,地址如上.onkeyup确实是可以做到实时获取的效果,因此我就是使用键盘事件来达到效果.HTML代码: <div class="content"> <textarea name="complain&

移动端、手机网站中文输入法下keyup事件部分按键无效

微信公众平台开发时,客户提需求"输入框中输入内容时,输入框后边显示清除按钮,清除输入框中的内容",使用"keyup"事件时在中文输入法下部分按键keyup事件无效, 以下为解决方案. 绑定"input"和"propertychange"事件可以解决,以下为代码: var bind_name="input";//定义所要绑定的事件名称 if(navigator.userAgent.indexOf("

类似baidu搜索 修正jquery的autocomplete在firefox下不支持中文输入法的bug

解决方法: 转自 =============================================================== http://blog.csdn.net/happymagic/article/details/8775123 =============================================================== jQuery.Autocomplete 是jquery的流行插件,能够很好的实现输入框的自动完成(autocomp

再谈multistage text input(中文输入法)下UITextView的内容长度限制

之前写过一篇<如何更好地限制一个UITextField的输入长度>,在文章最后得到的结论是可以直接使用 UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotification; 进行监听,截断超出maxLength的部分. 所以后来我在处理UITextView的内容长度时,也直接参考这个方法: [[NSNotificationCenter defaultCenter] addObserver:self selector:@select

ubuntu14.04英文环境下安装中文输入法

ubuntu14.04英文环境下安装中文输入法 发表于1年前(2014-07-12 20:12)   阅读(4478) | 评论(0) 3人收藏此文章, 我要收藏 赞1 9月19日成都 OSC 源创会正在报名,送机械键盘和开源无码内裤   摘要 搭建ubuntu用作开发,所以不想用中国定制的麒麟版,定制了太多东西,虽然已经装好中文输入法.下面总结在ubuntu14.04英文环境下安装中文输入法. ubuntu ubuntu拼音输入法 pinyin ubuntu默认的输入法是ibus,综合网上评论

ubuntu14.04英文环境下安装中文输入法(转载)

ubuntu14.04英文环境下安装中文输入法(转载) 摘要 搭建ubuntu用作开发,所以不想用中国定制的麒麟版,定制了太多东西,虽然已经装好中文输入法.下面总结在ubuntu14.04英文环境下安装中文输入法. ubuntu ubuntu拼音输入法 pinyin ubuntu默认的输入法是ibus,综合网上评论,fcitx的支持者更多,而且个人感觉fcitx也的确不错,可以满足日常输入. STEP1: 在Ubuntu Software Center 搜索fcitx,安装fcitx输入法框架,

APP弱网络条件下,体验优化之道

APP弱网络条件下,体验优化之道 最近跟朋友聊天刚好聊到这一块,他们是在做电商业务,商品图片及其多,API接口请求频率也高.然而,他们在移动2/3G的网络环境下,APP经常会出现Loading很久的情况,这里我把我们所分析与使用到的网络优化方案与大家分享一下. 所谓的弱网络,也就是指在网络不好的条件下进行使用APP,如2G.3G网络,这类网络条件下,用户的网络速度基本维持在10K/S~60K/S.如此差的网络环境, 如果还希望给用户提供良好的用户体验,那么我们的APP就该想想如何优化了. 转载表

Kali下安装中文输入法

1.打开终端: 2.使用vim或者gedit打开 /etc/apt 目录下的sources.list vim /etc/apt/sources.list 或者 gedit /etc/apt/sources.list 3.添加如下一些镜像源(速度会快点而已) deb http://http.kali.org/kali kali main non-free contrib deb-src http://http.kali.org/kali kali main non-free contrib deb

linux下中文输入法的安装

今天,在LinuxSLC5.3上安装了中文输入法,过程如下:原文出自[比特网],转载请保留原文链接:http://soft.chinabyte.com/os/102/11459102.shtml 1.安装中文字体库 yum install "font-chinese" 2.安装scim输入法 yum install "scim*" 3.安装scim-lang-chinese,scim-pinyin yum install scim-lang-chinese scim