周五在ubuntu上测了一下重构后的富文本,发现依然存在一个bug: 开启了中文输入法的话, 输入框就监听不到按钮事件了。
这个问题在webqq的聊天框一直存在着,也有很多用户投诉,具体表现为: 切换到中文输入法(ibus or other),输入一段内容后,第一次按下回车键可以发送消息, 之后的回车键都变成输入框的换行了。
花了一个中午排查了下,总算找到原因了:
在ubuntu上面,切换到中文输入法的时候,只有第一次按下的keydown/keyup事件会被抛出,之后都keydown和keyup事件都会被输入法接收且不会冒泡,因此输入框没办法对按钮作出响应。这个行为跟用什么浏览器无关,我在firefox和chrome都发现有这个问题。如果你的系统是ubuntu,可以点击这里测试。
幸运的是,经过测试,发现keypress能响应回车键(以及其他ctrl+v等没触发出中文输入法的键盘行为),因此可以把监听回车事件的代码转移到keypress中,解决掉这个存留已久的bug。
注意:opera的keypress事件是没有charCode的,且keyCode与keydown/keyup事件的keyCode一致,无语...
2011-6-6 更新:more
通过对ubuntu下面的firefox、chrome、opera测试,有两个发现:
- 启用了中文输入法就会监听不到keydown的问题只出现在firefox上面
- opera的keypress事件的keyCode与keydown的keyCode一致的情况只出现在window版本上,ubuntu的版本没发现该问题
因此,ubuntu的兼容就只用对firefox进行处理。
非常感谢。