こないだMac OS XのFirefoxで日本語入力ソフト使用時にEnterキーによる変換確定をkeydownイベントで拾ってしまう現象にヤラレたので、その問題を対処するにあたって他のブラウザでの動作を再確認しました。
その時の結果を、、イベントの発生有無とkeyCodeについて表にまとめてみました。数字はkeyCodeの値で、"-"になっているのはイベント自体が発生しなかったという意味になります。
みごと、同じ挙動なのが1つも無いといった結果になりましたが、実際、よく問題になるのは下記の2点だと思います。
- Mac OS X Safari 2.0.4 にて、カーソルキー(Up/Down/Left/Right)は1回押しただけで2度同じイベントが発生する。Safari 3.0で直っているという記事を見かけたが、実際に試せてません。
- Mac OS X Firefox 2.0 にて、日本語入力ソフト使用時も押下したキーに応じたkeydownイベントが発生する。(Enterを拾う際に特に注意)
上記表には書いて無いのですが、他にもいくつか気をつけたほうが良いところを、、
- Mac OS X Firefox 2.0 で、Ctrl + Enter の keydownイベント時のkeyCodeが、"m"とかぶる
どっちも72になります。 - Sleipnir 2.5.14 で、Escキーはkeydown、keypressのどちらでも拾えない。単独じゃなくて、Shift+Escだと拾える。
- Opera 9.2 だと、keypressイベントで単独で文字キー(例えば"a")を押下した際のkeyCodeと、Ctrlとあわせて押した場合とで、keyCodeが異なる。
Ctrlと一緒に押すと、keydownの際と同じkeyCodeになる。
ちなみに、keydownやkeypressなどのブラウザ毎の挙動を調べるときには、下記のページをいつも使ってます。自分でいうのもなんですが、、かなり重宝しています。