当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 输入法下keyup失效的解决方案

Javascript
如何用js控制css中的float的代码
Autocomplete Textbox Example javascript实现自动完成成功
FormValid0.5版本发布,带ajax自定义验证例子
wordpress之js库集合研究介绍
推荐发几个常用控件(新加DHTML控件)
7. Microsoft Online-Crash Control, version 6.0(微软在线崩溃控件)
javascript下阻止表单重复提交、防刷新、防后退
javascript下计数器每秒自动加1
给所有的超级练级都加上onmousemove时间的js代码
js实现运行代码需要刷新的解决方法
兼容FF/IE跟随鼠标的层的效果
用javascript获得css中的属性值的代码
用javascript实现页内搜索的脚本代码
用javascript 控制表格行的展开和隐藏的代码
用javascript实现隐藏状态栏的代码
Code: write(s,d) 输出连续字符串
javascript创建页面蒙板的一些知识技巧总结
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
用javascript判断输入数据是否货币并自动添加¥符号的代码
js类中获取外部函数名的方法

Javascript 中的 输入法下keyup失效的解决方案


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 405 ::
收藏到网摘: n/a

在某些情况下,比如自动补全(auto complete)的输入框中,需要使用keyup事件来监听键盘的输入以迅速作出回应。

关键在于keyup, 如果世界是美好的,那么就不会有这篇blog. 可是……

世界是不美好的。我们活在中文世界,我们要用输入法。在输入法开启的情况下,您会碰到不美好的事情:keyup失效。对于您绑定到keyup的任何回调函数,除非您把输入法切换回英文状态,否则它会无动于衷。如果能称之为bug,我会很高兴,因为bug会有修复的可能,如果是特征(feature),那么,我只好叹息一下。

问题

在开启输入法的情况下,三个浏览器的具体问题如下:

  • IE:触发keydown和keyup, 不触发keypress. 能够获得输入值。
  • Firefox:触发keydown和keypress, 不触发keyup. 输入值未能获得。在回车后会触发keyup, 可获得输入值。
  • Opera:keydown, keypress和keyup都不触发,输入值也未能获。

(如果您能帮我试用一下Safari,我会很高兴并谢谢您。这里有一个 测试页面

解决方案

总结出以上问题,没有兴奋反而陷入绝望,因为没有google出解决方案(是的,对于拉丁语系的老外来说,不会存在输入法)。但是,wait, 谷歌搜索的自动补全不是工作得好好的吗?于是研究一下这个 http://www.google.cn/ac.js。嘿嘿,虽然混淆得还可以,但还是可以发现蛛丝马脚的。它使用一个计时器,当输入框处于聚焦(focus)状态时,每10秒执行一次回调函数。

虽然挺耗资源(所以建议在输入框失焦(blur)时,一定要清除这个计时器),但也只能如此了。作前端开发的,不仅要与语言(JavaScript, CSS, HTML) 斗,还要与浏览器斗,其乐无穷也。