周五在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 更新:
通过对ubuntu下面的firefox,chrome,opera测试, 有两个发现:
- 启用了中文输入法就会监听不到keydown的问题只出现在firefox上面
- opera的keypress事件的keyCode与keydown的keyCode一致的情况只出现在window版本上, ubuntu的版本没发现该问题
因此, ubuntu的兼容就只用对firefox进行处理.
一条评论
Prisocheorict 2011/09/06
非常感谢。