5

Javascript でキープレスを照合するときにマジック ナンバーを回避できますか?

例としては、13 を使用してエンター キーに一致させます

独自の定数を指定できますが、これらの値がさまざまなプラットフォーム/ブラウザー/ロケールで十分に安定しているかどうかはわかりません。

4

1 に答える 1

6

これを初めて試みたときは、String の charCodeAt メソッドを使用しました。たとえば、「a」キーが押されたことを検出するには、次のようにします。

if ("A".charCodeAt(0) == event.keyCode) {
  /* Do stuff here. */
}

「a」の代わりに大文字の「A」を使用したことに注意してください。これは、event.keyCode が大文字の Unicode 値としてのみ報告されるためです (アルファベット キーの場合)。この問題をややこしくしているのは、押されたキーの Unicode 値を取得する方法がいくつかあることです。Firefox には次のものがあります。

  • event.keyCode
  • event.charCode
  • event.which

Mozilla 開発者ドキュメントによると、キーの Unicode 値はevent.keyCodeまたはevent.charCodeのいずれかに保存されますが、両方には保存されません。どちらにコードがあるかに関係なく、event.whichにも格納されます。. ただし、値が charCode に格納されている場合は、大文字と小文字が区別されます。そのため、イベントの取得元によっては、「a」と「A」の両方をチェックする必要がある場合があります。「onkeydown」イベントからのみキー イベントを取得する余裕があり、Firefox をターゲットにしている場合は、event.keyCode で設定された大文字と小文字を区別しないコードを取得することが期待できます。実際、Windows XP の Firefox 3.0.3、MacOS 10.4 の Firefox 3.0.4、MacOS 10.4 の Safari 3.2.1、MacOS 10.4 の OmniWeb 5.8 でこれをテストしましたが、すべて同じように動作します。ただし、IE バージョンや Opera などでこれを試したことはありません。

これを自分でゼロから開発したい場合。アクセスできるさまざまなオペレーティング システムで見つけられる限り多くのさまざまなブラウザーを入手し、各ブラウザーがキー コードをどのように報告するかを調べるための実験を行うことをお勧めします。ただし、誰かがすでにその作業を行っています。例としてリンクした質問への回答の1つでさえ言及されていました! js-hotkeysという jQuery のプラグインです。キーまたはキーの組み合わせが押されたときに実行されるコールバック関数を登録できます。プロジェクトのサイトからコピーした使用例:

$(document).bind('keydown', 'Ctrl+a', fn);

さまざまなブラウザー/プラットフォームで動作することがテストされているため、jQuery を使用している場合は、おそらくこれが最適です。何らかの理由で jQuery を使用したくない場合でも、問題はありません。どうやらこれは、代わりに使用できる別のスクリプトに基づいていたようです。私はまだこれらのライブラリを個人的に利用したことがないので、使いやすさや有効性については保証できません。とはいえ、もし私があなたの問題を抱えていたら、それが私が解決しようとする方向です.

于 2009-03-05T05:33:40.147 に答える