`
hongtoushizi
  • 浏览: 379246 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

对键盘事件的总结(针对中文输入法状态)

阅读更多

转载:http://www.cnblogs.com/maorongmaomao/archive/2011/12/18/2291865.html

 

事件顺序:keydown -> keypress ->keyup

对于输入法开启时:

  keypress

  这三个事件中最最特别的事件的说,如果巧妙运用可以事半功倍:

   1.  首先对于大部分功能键是没有keypress事件的

       Caps lock shiftaltctrlnum lock、、、庆幸的是enter拥有此事件

   2.    对于字母,数字,press返回的keyCode是不可靠的

       在IEwebkit 下 返回的是ASCII code

       firfox下永远返回0

       但是 对于keyUP keyDOWN事件 键值是完全统一的

  3.   KeyPress 只能捕获单个字符

   KeyDown KeyUp可以捕获组合键。故可能涉及组合键的功能需要绑定在down up事件上

      对于中文输入法开启时个浏览器对事件的不同相应以及解决方法:

    在中文输入法开启状态下:

           Firefox当点击字母键时,会触发这样的事情:

            



     为什么叫做虚拟失焦呢 这种状态下并未真正触发失焦状态,但是却屏蔽了所有输入框绑定的键盘事件     

        IEwebkit  但用户点击字母键,又会发生这样的事情

          



 

启发: 由于在这种状态下 是可以捕捉keyup,keydown从而捕捉KEYCODE的,前端可以通过模拟KEYCODE入输入框实现输入法与输入框的同步状态,并触发在输入状态时便同步suggestion。

 

 

那么如何避免,在输入法运行时用户在敲击回车键,触发回车键原来的事件呢?

         看了上面两个图,这么一来便很简单了 -------keyPress事件绑定原来的事件,如触发搜索等

keyup绑定 在输入法运行时,回车,空格等需要触发的事件,亦可以用来检测退出搜索框

 

那么如何检测用户在输入后的一点呢?

    通过配合上一个问题中判断出的keyUP事件 如果需要在输入法出现时屏蔽事件,只要绑定到keypress事件便可以了

suggestion的总结:

从开始讲起:

suggestion的开发中,最大的阻碍就是检查用户行为了,而这些用户行为主要会聚在小小的输入框上,对键盘事件的巧妙运用,可以减少代码量,提升性能,最大程度上优化用户体验。

 

主要的用户行为总结如下:

 1.改变输入内容(增加,删除,粘贴)--其中,最重要的便是连续输入了

 2.敲击功能键--主要key值为:

        keyCode :13 --回车键

        keyCode :27 --esc键

        keyCode : 38--上方向键 -->webkit内核下会自动定位到首部,记得要preventDefault~

        keyCode :40 --下方向键

开发中还遇到了一些小问题,和弯路:

 首先从思想上来个总结:

1.    错误的思路:

 之一:每次用户敲击键盘便发送请求

 这无疑是就简单是方式,但是却需要大量的AJAX,而且大部分是没有展现机会的,好的前端代码,应该充分考虑到前后端交互中虚耗,最大程度上减少虚耗。

 之二:每隔一段时间检测输入框内容:

 每隔一段时间边执行一次代码,浪费性能就不用说什么了,最重要的是,这一机制不能很好的掌控用户输入事件与js检测的先后顺序,

 检测完毕如果正好发生在了用户输入之后,便会出现错误。虽然可以用检测当前输入框状态来弥补,但是体验却很差,而且虚耗了很多ajax请求。

2.优化后的思路:

        绑定在key敲击事件后

        第一种方式开发完后,我发现在自测时,由于不能准确监控用户行为的时间戳,导致了众多bug,再一一修复后,一个更好的思路萌发了。

        通过检测key的敲击事件,来判断是否发送请求,并屏蔽连续敲击事件。

        具体思路:

        当用户聚焦输入框时,开始监控keydown事件,记入此时输入框状态,当有keydown事件并输入框能容改变100毫秒后检测当前输入框状态如果与之前不相符择可向后端发送AJAX请求

 这样一来,根据用户的输入,输入频率,判断ajax请求数,并通过阀值的限制,减少ajax请求。用户输入的多,js检测的就多,ajax便多,用户不动,便没有js检测和ajax,输入的慢则少,很好的减少了虚耗。

 

 

分享到:
评论

相关推荐

    suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)

    本文将总结`suggestion`组件的开发经验,并重点讨论键盘事件,特别是针对中文输入法状态下的事件处理。 首先,我们需要了解键盘事件的顺序:keydown → keypress → keyup。在输入法开启时,keypress事件显得尤为...

    中文输入法以及浏览器兼容的问题1

    总的来说,处理中文输入法和浏览器兼容性问题需要对DOM事件和用户代理有深入理解。通过合理选择和使用事件监听器,以及对浏览器行为的精确控制,可以有效地解决这些问题,提供更好的用户体验。在开发过程中,应不断...

    QT实现中文输入法程序

    对于输入法程序,可能需要创建自定义的输入框、候选词窗口、状态栏等组件,并处理键盘事件和鼠标事件。 3. **中文字符编码**:在处理中文输入时,理解Unicode编码和各种中文编码格式(如GBK、GB2312等)非常重要。...

    wpf 触屏虚拟键盘支持中英文切换

    6. **键盘状态管理**:在程序中维护一个表示键盘状态的变量,用于追踪当前是英文模式还是中文模式,以及进行相应的切换操作。 7. **UI设计与动画**:为了让用户体验更加流畅,可以添加键盘弹出和关闭的动画效果。...

    51单片机的中文输入法设计

    在设计中文输入法时,51单片机需要处理键盘输入、存储拼音库、进行拼音匹配和转换为汉字等功能,这要求高效利用有限的资源。 12864是描述液晶显示屏分辨率的一个术语,指的是128列和64行的点阵,常用于显示文本和...

    WinCE/Windows Mobile关闭中文输入法方法

    由于这些系统在设计时主要针对企业级设备,如掌上电脑、工业终端和早期的智能手机,它们默认配置了中文输入法,以适应广泛的国际用户需求。然而,在某些特定场景下,例如在进行英文为主的输入时,频繁切换输入法可能...

    任务栏键盘输入法不兼容问题

    总的来说,解决任务栏键盘输入法不兼容问题需要对系统设置、驱动程序、软件冲突以及注册表进行排查和修复。通过上述步骤,大多数情况下都能找到问题所在并进行有效修复。然而,对于一些复杂的情况,可能需要寻求专业...

    输入法调整器 输入法修复工具

    这在某些特定场景下非常实用,比如在进行汉字输入时需要保持在同一输入法状态,或者在进行英文输入时不想被其他输入法打断。 标签中的“输入法调整”和“修正器”进一步强调了这个软件的核心功能,即对输入法进行...

    cad2021自动切换输入法.rar

    针对这一问题,"cad2021自动切换输入法.rar" 提供了一个解决方案,旨在帮助用户在双击字体时自动切换到中文输入法,从而简化工作流程,提高绘图效率。 这个压缩包包含两部分内容: 1. **输入法自动切换教程.docx**...

    中文输入法探查器(用AHK脚本编写的)

    它可以显示输入法的详细信息,如制造商、版本、状态等,以便用户进行针对性的修复或卸载。 使用中文输入法探查器的另一个好处是它的易用性。作为一款基于AHK脚本的软件,它通常体积小巧,无需复杂的安装过程,用户...

    wince 中文输入法编辑器

    其中,中文输入法编辑器(IME,Input Method Editor)是针对中文等复杂书写系统的输入解决方案之一。本文旨在深入探讨Windows CE中的中文输入法编辑器及其相关组件。 #### 二、输入法编辑器基本概念 **1. 输入法...

    T9拼音输入法实验.rar_radionk5_stm32t9输入法_t9输入_t9输入法c实现_拼音输入法

    它通过将汉语拼音的每个字母与数字键盘上的9个键对应,使得用户只需按数字键就能输入汉字。T9输入法采用了智能预测和联想技术,减少了用户输入的次数,提高了输入效率。在STM32这样的嵌入式平台上实现T9拼音输入法,...

    Android平台输入法源码汇总

    客户端则负责显示输入法界面,管理键盘状态,并处理用户与键盘的交互。 OpenWNN是其中一种流行的开源日文输入法,它的源码包含了许多输入法设计的关键技术。例如,OpenWNN实现了词库管理,支持日语的平假名、片假名...

    各类三方键盘弹出高度适配,包括但不限于:搜狗输入法、百度输入法、讯飞输入法、章鱼输入法、QQ输入法等

    标题和描述中提到的"各类三方键盘弹出高度适配"是指针对第三方输入法的应用程序开发过程中的一个关键问题——如何确保这些输入法在不同设备和操作系统环境下能够正确、舒适地显示。在iOS和Android平台上,由于屏幕...

    TSF输入法demo

    开发者可以从中学习到如何利用TSF服务来处理键盘输入、候选词显示、上下文关联以及输入法状态的切换等关键功能。通过研究和分析示例代码,可以快速上手输入法开发,并且能够适应不同应用程序的需求。

    PB切换输入法(网上找的其它方法不管用的,可以试试我的方法)

    在编程时,有时需要在中文输入法和英文输入法之间快速切换,以便于输入代码和注释。网上可能有很多方法,但并非所有方法都适用于所有用户或所有环境。描述中提到,这个方法是在其他通用方法无效的情况下,经过微调后...

    输入法的错误修复,输入法修复

    在IT领域,输入法是操作系统中的一个重要组成部分,它允许用户通过键盘输入中文、英文以及其他语言的文字。当输入法出现错误时,可能会影响到用户的日常使用,例如打字速度变慢、输入错误、输入法无法切换等问题。...

Global site tag (gtag.js) - Google Analytics