Question ホストやC/Sシステムのように,WebブラウザでもEnterキーで項目移動できるようにしたいのですが,良い方法はありますか?

Answer JavaScriptを利用するのが簡単です。ただし,WebブラウザごとのJavaScriptの互換性などに注意が必要です


図1●ユーザーが入力したキーをJavaScriptで判別する
Enterキーの場合はfocus()メソッドで次の入力項目をフォーカスすれば項目移動ができるようになる。ただし,Webブラウザの種類やバージョンによってキーの判別方法が異なるなどの点に注意する必要がある
図2●Enterキーで項目移動させるJavaScriptの例
入力項目が<input type="text">のみの場合は簡単だが,<input type="checkbox">や<input type="radio">などが混在していると,HTMLの記述が複雑になる
 業務アプリケーションでは「テンキーだけで伝票のデータを入力したい」ということがよくあります。ホストやC/SシステムではEnterキーで項目を移動できるのでスムーズな入力が可能ですが,Webブラウザの場合は一般にTabキーで項目を移動しなければならず不便です。Webブラウザに表示された入力項目をEnterキーで移動したいという要望は少なくありません。

 これはJavaScriptを使えば,簡単に実現できます。具体的には,ユーザーが入力したキーをJavaScriptで判別し,Enterキーの場合はfocus()メソッドで次の項目に移動させます(図1[拡大表示])。

簡単だが,注意点も多い

 JavaScriptを記述する際は,いくつか注意が必要です。(1)Webブラウザの種類やバージョンによってキーの判別方法が違う,(2)<input type="submit">でsubmitボタンを作成すると,Enterキーの入力時に自動的にsubmitされてしまう,(3)<input type="checkbox">や<input type="radio">などの項目が混在している場合は個別に対処が必要――といった点です。

 JavaScriptの例を見ながら,それぞれの注意点を見ていきましょう(図2[拡大表示])。(1)は,例えばInternet Explorer 4.x/5.x/6.xではevent.keyCodeと呼ぶプロパティでユーザーが入力したキー(Enterキーは13)を取得できますが,Webブラウザによっては利用できません。複数のWebブラウザが混在している場合は,図2のgetKEYCODE関数のようにWebブラウザの種類やバージョンを判別し,それに応じて別々のコードを記述します。

 (2)の自動的にsubmitされてしまう問題は,<input type="submit">を使わないことで回避します。<input type="button">でsubmit用のボタンを作り,クリックした際に<form>の内容をsubmitするJavaScriptをonClickイベントで呼び出すようにします。

 (3)の入力項目の混在ではさまざまな問題が起きます。例えばradioでは,図2下のname="b5"のようにname属性がすべての選択肢で同じになります。次の移動位置(nextElement)にb5などのname属性を指定すると,どの選択肢か分からずエラーになります。<form>に含まれる要素の順番で移動位置を指定する必要があります。またNetscape 7.1では,checkboxやradioの項目に移動すると,自動的にsubmitされてしまう現象が確認できました。submitさせないためのflg変数を用意し,登録ボタンをクリックした場合のみsubmitを許可します。

JavaScript以外の方法も

 ユーザーの入力キーを判別する方法は,矢印キーや一部のファンクション・キーにも応用可能です。しかし,いろいろな機能や条件を足していくと,HTMLやJavaScriptの作成やメンテナンスが大変になります。これらの点を踏まえた上で効果的に利用する必要があります。複雑な画面や高度な機能が必要な場合は,米MacromediaのFlashなどのリッチ・クライアントの利用も検討しましょう。

(本誌)