JavaScriptのキーボードイベント
現時点での話なので将来的に変わる可能性が大あり。
ちゃんと検証してないのでどうなっても知りません。
Safri 3.0.4
Firefox 2.0.0.9
- keydownは押した最初の1回のみ。
- keydownでpreventDefaultしても文字入力は阻止できずにkeypressでpreventDefaultしないとだめ。
- keydownのcharCodeは常にゼロ。
- keypressで非文字キーだとkeyCodeにキーボードのコードが入ってcharCodeはゼロ。文字キーだとkeyCodeはゼロでcharCodeにASCIIのコードが入る。
- window.eventがundefined。
Opera 9.24
- keydownは押した最初の1回のみ。
- keydown, keypress共にどんな文字であろうがkeyCodeのみ使用。
- keydownのkeyCodeは基本的にキーコードだけどShiftキーを押すと(多分)ASCIIコード。
- keypressのkeyCodeは基本的にASCIIコードだけど非文字キーは(多分)キーコード。
- charCodeはいつでもundefined。
keypressでpreventDefaultしないと殺せない。keydownだろうがkeypressだろうがフォーム部品への文字入力自体は殺せない気がする。ブラウザへの伝播は殺せてそう。
IE6
- keydownが連続して呼ばれる。
- keypressは文字キーの場合のみ連続して呼ばれる。非文字キーだと呼ばれない。
- keydownでreturnValue=falseをするとキー入力の阻止と同時にkeypressの呼び出しも阻止される。
- keydownのkeyCodeは必ずキーコード。Shiftを押しててもControlを押しててもキーコードそのまま。
- keypressのkeyCodeはASCIIコード。ASCIIコードが取れないキーだとそもそもkeypressが呼ばれないので必ずASCIIコード。
- W3C DOMではないのでpreventDefaultなんてものはない。