之前写过Opera浏览器在输入法开启情况下无法触发键盘事件的解决办法——oninput事件。点这里
这个问题的解决办法主流的有两种,一种是用oninput事件代替keydown事件来监测键盘动作,另一种是采用轮询的方法监测输入框值变化。使用轮询的方法会稍微影响性能,这个应该很容易理解。
之后我在陈广琛的博客上看到他也提到轮询的方法,针对Opera和Firefox for Mac两种“特殊”的浏览器,他给出了以下代码:
1 var timer;
2 var imeKey = (UA.Opera == 0) ? 229 : 197;
3
4 function keydownHandler (e) {
5 clearInterval(timer)
6 if (e.keyCode == imeKey || UA.Firefox > 0 && UA.OS == 'Macintosh') {
7 timer = setInterval(checkTextValue, 50);
8 } else {
9 checkTextValue();
10 }
11 }
12
13 function checkTextValue() {
14 /* handle input text change */
15 }