【转】http://realazy.org/blog/2007/10/31/solution-of-keyup-failing-when-ime-is-on/
在某些情况下,比如自动补全(auto complete)的输入框中,需要使用keyup事件来监听键盘的输入以迅速作出回应。
关键在于keyup, 如果世界是美好的,那么就不会有这篇blog. 可是……
世界是不美好的。我们活在中文世界,我们要用输入法。在输入法开启的情况下,您会碰到不美好的事情:keyup失效。对于您绑定到keyup的任何回调函数,除非您把输入法切换回英文状态,否则它会无动于衷。如果能称之为bug,我会很高兴,因为bug会有修复的可能,如果是特征(feature),那么,我只好叹息一下。
问题
在开启输入法的情况下,三个浏览器的具体问题如下:
IE:触发keydown和keyup, 不触发keypress. 能够获得输入值。
Firefox:触发keydown和keypress, 不触发keyup. 输入值未能获得。在回车后会触发keyup, 可获得输入值。
Opera:keydown, keypress和keyup都不触发,输入值也未能获。
(如果您能帮我试用一下Safari,我会很高兴并谢谢您。这里有一个测试页面:http://tonextone.com/test/eventTest.html)
解决方案
总结出以上问题,没有兴奋反而陷入绝望,因为没有google出解决方案(是的,对于拉丁语系的老外来说,不会存在输入法)。但是,wait, 谷歌搜索的自动补全不是工作得好好的吗?于是研究一下这个 http://www.google.cn/ac.js。嘿嘿,虽然混淆得还可以,但还是可以发现蛛丝马脚的。它使用一个计时器,当输入框处于聚焦(focus)状态时,每 10 毫秒执行一次回调函数。
虽然挺耗资源(所以建议在输入框失焦(blur)时,一定要清除这个计时器),但也只能如此了。作前端开发的,不仅要与语言(JavaScript, CSS, HTML) 斗,还要与浏览器斗,其乐无穷也。
更新:IE 有一个 onpropertychange 事件处理器可以随时检测变化,对应之,Firefox 和 Opera 有一个 oninput 事件处理器也可以达到目的。遗憾的是,在输入法开启的情况下,Opera对于 oninput 也没法随时监听(表现在:输入英文字母可以监听到,而中文则失效)。如果不考虑 Opera, IE使用 onpropertychange 而 Firefox 使用 oninput, 也可解决我们上述问题。
另外需要注意的是, oninput 比较诡异,您可以<input oninput="jsFunc()" ... />来绑定,也可以用addEventListener来绑定,就是不能使用 DOM 0 的element.oninput = function(){} 的形式来绑定,否则不生效。
未曾测试Safari, 有心者可自行测试之。
分享到:
相关推荐
为解决这一问题,开发者需要在compositionend事件处理程序中添加条件判断,针对特定的用户代理(即搜狗和百度浏览器),在这些浏览器下不执行发送文本内容的操作,以确保其他输入法的正常输入。 总的来说,处理中文...
在处理用户交互时,输入法的切换是一个常见的需求,特别是在需要确保用户输入英文字符的场景下。本资料包“易语言_api切换输入法_英文.zip”提供了实现这一功能的方法。 API,全称为应用程序接口,是操作系统提供给...
在VB(Visual Basic)编程环境中,切换中文输入法是一项常见的需求,特别是在开发具有用户交互界面的应用程序时。本文将深入探讨如何在VB中实现这一功能,以满足中文输入的需求。 首先,我们需要理解VB中的基本输入...
解决这个问题的一种方法是利用jQuery监听键盘事件,并在用户开始输入前切换输入法模式。jQuery提供了丰富的事件处理函数,如`.keydown()`, `.keyup()`, 和 `.keypress()`,可以用于监听用户的键盘操作。结合...
keydown事件发生在按键被按下的时候,接着触发keypress,松开按键的时候触发keyup事件 中文输入法: firfox:输入触发keydown,回车确认输入触发keyup chrome:输入触发keydown、keyup,回车确认输入只触发keydown ...
JavaScript开发的拼音输入法是一种基于Web的输入解决方案,它利用JavaScript这门客户端脚本语言的强大功能,为用户提供方便快捷的中文输入体验。在浏览器环境中,JavaScript可以与用户进行实时交互,使得拼音输入法...
在英文输入法下,`onkeyup`事件通常是一个有效的选择,它会在用户释放键盘按键时触发。然而,当用户切换到中文输入法时,`onkeyup`事件不再正常工作,导致实时监控文本框输入的功能失效。这个问题主要是由于中文...
标题中的“输入法快捷设置及源码”表明这是一个关于创建自定义输入法快捷键的项目,使用了Delphi编程语言。Delphi是一款基于Object Pascal的集成开发环境,以其高效的编译器和直观的可视化设计界面著称,尤其适合...
4. 使用VB的Form或Control事件,如KeyDown或KeyUp,监听用户的输入行为,根据需要触发输入法切换。 5. 在适当的时候调用API函数,发送键盘事件,实现输入法切换。 6. 测试和调试程序,确保在各种情况下都能正确无误...
- `dwFlags`:标志位,可以指定按键事件类型,如`KEYEVENTF_KEYDOWN`(按下)、`KEYEVENTF_KEYUP`(释放)和`KEYEVENTF_SILENT`(无声音)。 - `dwExtraInfo`:附加信息,一般为0。 在`SetIMStatus`函数中,通过...
《jQuery云输入法与手写输入法功能实现详解》 在现代网页开发中,为了提供更优秀的用户体验,尤其是在中文输入...通过研究和理解这个源码,开发者不仅可以掌握相关技术,还能为自己的项目带来更丰富的输入解决方案。
### C# WinForm中的KeyDown, KeyPress和KeyUp事件相关知识点 #### 一、按键的类型与识别 在C# WinForm应用中,处理用户的键盘输入是常见需求之一。Windows窗体通过引发键盘事件来响应用户的键盘操作。这些事件主要...
【MTK平台输入法详解】 MTK平台输入法是针对基于联发科(Mediatek)芯片的手机系统设计的一种输入方法,它涉及到人机交互界面的关键组件,为用户提供便捷的文字输入体验。本文将深入解析MTK平台上的两种主要输入方式...
一开始尝试的解决方案是将“keydown”事件改为“keyup”事件,这在某种程度上能解决中文输入匹配的问题,但会破坏插件中如回车(ENTER)、制表符(TAB)等其他重要键位的事件绑定机制。比如在表单内的输入框中,...
通过监听`TextBox`的`KeyDown`和`KeyUp`事件,可以捕捉用户的按键行为,进而提供相应的服务,如候选词显示等。 此外,为了实现类似输入法的候选词列表,可以使用`ListBox`或`ListView`控件,根据用户输入动态填充...
在Vue.js和Element-UI框架的开发过程中,有时会遇到绑定`@keyup`事件失效的情况。这通常是由于Element-UI组件内部已经处理了键盘事件,导致外部定义的事件监听器无法正常工作。针对这个问题,我们可以采取一些策略来...
这个解决方案的核心思想是将键盘事件处理逻辑移动到不会被`MessageBox`触发的事件中,以及正确地阻止或管理事件的默认行为。在编写涉及用户界面交互的代码时,理解这些事件的工作原理和如何控制它们的行为至关重要,...
在VB窗体中,我们可以使用`KeyDown`和`KeyUp`事件来捕获用户按下和释放键盘键的动作。这两个事件在`Form`对象或任何控件上都可以使用。例如,以下代码展示了如何在窗体上响应`KeyDown`事件: ```vb Private Sub ...