【jQuery】キー入力の検知は、ブラウザ毎に処理を分ける必要がある


最終更新: 2012-11-11
※ 分岐の必要はありません。
全てのブラウザで"keydown"が適しています。


残り使用文字数を表示するなど、キー入力のたびに何らかの処理を
おこないたい場合、キー入力を検知するイベントハンドラとして
"keypress"と"keydown"どちらがいいのでしょうか。


結論は、Operaは『keypress』、それ以外は『keydown』、でした。
Operaの更新により、すべて"keydown"で正しく検知できます。


【実験用ページ】
http://www.usamimi.info/~sutara/sample/jq_key.php

実験結果
keypress keydown
Delキー
Backspace
その他 Delキー
Backspace
その他
Firefox 16.0
Chrome 23.0 ×
Safari 5.1.7 ×
Opera 12.10 ×
Opera 11.52 × ×
IE6,7,8,9 ×



※ 以下の内容は古くなっています。
Opera 12以降ならば分岐させる必要はありません。



分岐例
『keypress』では、FirefoxOpera以外、DeleteとBackspaceに反応してくれません。
『keydown』では、Operaでキーを押し続けても連続入力として認識してもらえません。
そこで、Operaとそれ以外で処理を分ける必要があります。


if(window.opera){
//Opera
$('#hoge').keypress(funcHoge);
}else{
//それ以外
$('#hoge').keydown(funcHoge);
}
function funcHoge(){ ... }

以前、『$.support』で分岐する方法を記載していましたが、そんなことをする必要はありませんでした…。
『window.opera』で十分です。


※$.supportによるブラウザの判別について↓
http://d.hatena.ne.jp/sutara_lumpur/20100717/1279347937