转载:http://www.cnblogs.com/maorongmaomao/archive/2011/12/18/2291865.html
事件顺序:keydown -> keypress ->keyup
对于输入法开启时:
keypress:
这三个事件中最最特别的事件的说,如果巧妙运用可以事半功倍:
1. 首先对于大部分功能键是没有keypress事件的
Caps lock ,shift,alt,ctrl,num lock、、、庆幸的是enter拥有此事件
2. 对于字母,数字,press返回的keyCode是不可靠的
在IE和webkit 下 返回的是ASCII code
firfox下永远返回0
但是 对于keyUP keyDOWN事件 键值是完全统一的
3. KeyPress 只能捕获单个字符
KeyDown 和KeyUp可以捕获组合键。故可能涉及组合键的功能需要绑定在down up事件上
对于中文输入法开启时个浏览器对事件的不同相应以及解决方法:
在中文输入法开启状态下:
Firefox:当点击字母键时,会触发这样的事情:
为什么叫做虚拟失焦呢: 这种状态下并未真正触发失焦状态,但是却屏蔽了所有输入框绑定的键盘事件
IE,webkit : 但用户点击字母键,又会发生这样的事情
启发: 由于在这种状态下 是可以捕捉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`组件的开发经验,并重点讨论键盘事件,特别是针对中文输入法状态下的事件处理。 首先,我们需要了解键盘事件的顺序:keydown → keypress → keyup。在输入法开启时,keypress事件显得尤为...
总的来说,处理中文输入法和浏览器兼容性问题需要对DOM事件和用户代理有深入理解。通过合理选择和使用事件监听器,以及对浏览器行为的精确控制,可以有效地解决这些问题,提供更好的用户体验。在开发过程中,应不断...
对于输入法程序,可能需要创建自定义的输入框、候选词窗口、状态栏等组件,并处理键盘事件和鼠标事件。 3. **中文字符编码**:在处理中文输入时,理解Unicode编码和各种中文编码格式(如GBK、GB2312等)非常重要。...
6. **键盘状态管理**:在程序中维护一个表示键盘状态的变量,用于追踪当前是英文模式还是中文模式,以及进行相应的切换操作。 7. **UI设计与动画**:为了让用户体验更加流畅,可以添加键盘弹出和关闭的动画效果。...
在设计中文输入法时,51单片机需要处理键盘输入、存储拼音库、进行拼音匹配和转换为汉字等功能,这要求高效利用有限的资源。 12864是描述液晶显示屏分辨率的一个术语,指的是128列和64行的点阵,常用于显示文本和...
由于这些系统在设计时主要针对企业级设备,如掌上电脑、工业终端和早期的智能手机,它们默认配置了中文输入法,以适应广泛的国际用户需求。然而,在某些特定场景下,例如在进行英文为主的输入时,频繁切换输入法可能...
总的来说,解决任务栏键盘输入法不兼容问题需要对系统设置、驱动程序、软件冲突以及注册表进行排查和修复。通过上述步骤,大多数情况下都能找到问题所在并进行有效修复。然而,对于一些复杂的情况,可能需要寻求专业...
这在某些特定场景下非常实用,比如在进行汉字输入时需要保持在同一输入法状态,或者在进行英文输入时不想被其他输入法打断。 标签中的“输入法调整”和“修正器”进一步强调了这个软件的核心功能,即对输入法进行...
针对这一问题,"cad2021自动切换输入法.rar" 提供了一个解决方案,旨在帮助用户在双击字体时自动切换到中文输入法,从而简化工作流程,提高绘图效率。 这个压缩包包含两部分内容: 1. **输入法自动切换教程.docx**...
它可以显示输入法的详细信息,如制造商、版本、状态等,以便用户进行针对性的修复或卸载。 使用中文输入法探查器的另一个好处是它的易用性。作为一款基于AHK脚本的软件,它通常体积小巧,无需复杂的安装过程,用户...
其中,中文输入法编辑器(IME,Input Method Editor)是针对中文等复杂书写系统的输入解决方案之一。本文旨在深入探讨Windows CE中的中文输入法编辑器及其相关组件。 #### 二、输入法编辑器基本概念 **1. 输入法...
它通过将汉语拼音的每个字母与数字键盘上的9个键对应,使得用户只需按数字键就能输入汉字。T9输入法采用了智能预测和联想技术,减少了用户输入的次数,提高了输入效率。在STM32这样的嵌入式平台上实现T9拼音输入法,...
客户端则负责显示输入法界面,管理键盘状态,并处理用户与键盘的交互。 OpenWNN是其中一种流行的开源日文输入法,它的源码包含了许多输入法设计的关键技术。例如,OpenWNN实现了词库管理,支持日语的平假名、片假名...
标题和描述中提到的"各类三方键盘弹出高度适配"是指针对第三方输入法的应用程序开发过程中的一个关键问题——如何确保这些输入法在不同设备和操作系统环境下能够正确、舒适地显示。在iOS和Android平台上,由于屏幕...
开发者可以从中学习到如何利用TSF服务来处理键盘输入、候选词显示、上下文关联以及输入法状态的切换等关键功能。通过研究和分析示例代码,可以快速上手输入法开发,并且能够适应不同应用程序的需求。
在编程时,有时需要在中文输入法和英文输入法之间快速切换,以便于输入代码和注释。网上可能有很多方法,但并非所有方法都适用于所有用户或所有环境。描述中提到,这个方法是在其他通用方法无效的情况下,经过微调后...
在IT领域,输入法是操作系统中的一个重要组成部分,它允许用户通过键盘输入中文、英文以及其他语言的文字。当输入法出现错误时,可能会影响到用户的日常使用,例如打字速度变慢、输入错误、输入法无法切换等问题。...