キーボード関係のイベントも、もちろん用意されています。HTMLの要素では、以下のようなイベント属性が揃っています。
onkeypress――キーをタイプしたとき。
onkeydown――キーを押し下げたとき。
onkeyup――キーを離したとき。
これらのイベントは、
「そのときフォーカスを持っている要素」に向けて送られます。例えば、複数の入力フィールドがあった場合、キーをタイプすると、選択されている入力フィールドのタグに用意されたイベント属性の処理が呼ばれるわけです。もし、何も選択されない状態だった場合には、<body>のイベント属性が呼び出されます。
※利用例
では、簡単な利用例を下のリストに掲載しておきましょう。これは、キーをタイプすると、それがリアルタイムに表示されるというサンプルです。ここでは、<body>の
onkeypressにdoActionを設定しています。また、マウスイベントと同様に、発生したイベントのeventオブジェクトを引数に渡し、必要な情報を得るようにしています。
押されたキーに関する情報は、このeventから取得します。が、注意しなければならないのは、「ブラウザによって、用意されているプロパティが違う」という点です。IE系では
「keyCode」というプロパティが、それ以外では
「charCode」というプロパティが用意されているのです。
これらは、いずれも「押されたキーで表示される文字のコード番号」を示すものです。このコード番号を元に、
「String.fromCharCode」というStringオブジェクトのメソッドを使って、そのコード番号の文字を取り出します。後は、それを<div>タグのテキストに追加して表示すればいいわけです。
ここでは、IE系とそれ以外に対応するため、
「if (e.charCode != undefined)」というようにして、
charCodeの値が
undefined(未定義)でなければ
charCodeの値を取り出し、それ意外は
keyCodeの値を取り出す、といった変則的な処理をしています。
先に、選択テキストのイベントでも、「IEとそれ以外」で処理を分けました。ここでも、やはり「IEか、そうでないか」による互換性の問題を考えなければいけません。まったく、世の中にIEさえなければ……あー、いや、IEもバージョンが上がるにつれ、次第に独自の方式から、標準的な実装になりつつあります。あと何年か(あるいは十何年か、または何十年か)すれば、こうした問題もきっと解決していることでしょう。えっと、多分。