6

ターミナルへのブラウザインターフェイスを構築しています。文字(英数字、ドット、スラッシュなど)と文字以外のキーの押下(矢印、F1〜F12、...)の両方をキャッチする必要があります。また、ユーザーがキーを押したままにすると、キーを繰り返し押すと便利です(キーが離されるまで関数を繰り返し呼び出す必要があります)。同じことがスペースキー、文字、...にも当てはまります。

これを可能な限りクロスブラウザにしたいと思います(そのアカウントでjQueryキーを押すと失敗します)。jquery.hotkeys.jsのフォークも使用してみましたが、正しく理解していれば、1つの関数で特殊キーと文字キーの両方をキャッチできません(前者にはkeydownを使用し、後者にはkeydownを使用する必要があります)。

文字キーと特殊キーの両方をキャッチできるJSライブラリはありますか?

明らかな何かを見逃していないことを願っています。:)

更新明確にするために:私はブラウザの実装の詳細を私から隠すライブラリを探しています。

4

3 に答える 3

4

onkeydownまさにあなたが必要とするものです。ボタンを押し続けている場合でも、すべてのキーがキャプチャされ、繰り返し起動されます。

<input type='text' onkeydown='return myFunc(this,event)'>

<script>
   function myFunc(Sender,e){
     var key = e.which ? e.which : e.keyCode;

     if(key == someKey){ // cancel event and do something
        ev.returnValue = false;
        if(e.preventDefault) e.preventDefault();
        return false;
     }
   }
</script>

UPDATEこれをjQueryでテストしてみてください

$(document).ready(function(){
$('#in').keydown(fn);
});

var cnt = 0;
function fn(e){
   var key = e.keyCode ? e.keyCode : e.which;
   cnt++;

   if(cnt == 10) {
  alert('event was fired 10 times. Last time with key: '+key);
      cnt = 0;
   }
}
于 2011-10-07T12:27:20.063 に答える
1

私はkeycode.jsを使用することになりましたが、イベントの 1 つ (keydown) だけでは、どの文字が入力され、どのキーが押されたかを判断するのに十分ではないため、keydown、keypress、および keyup イベントを中心にイベント管理システム全体を構築しています。は対応する文字がありません。ブラウザーの非互換性は、この課題の追加ボーナスです。:)

両方の回答に感謝します。問題を完全に理解するのに役立ちました。

于 2011-10-11T06:19:47.417 に答える
1

DOM 3 Events 仕様には重要なイベントが含まれていますが、まだ草稿段階であるため、まだ広くサポートされていない可能性がありますが、かなり役立つはずです。

キーコードを文字に変換するには、Quriskmodeが役立つ場合があります。どのキーが押されたか、どのモディファイアが目的の場所に到達する必要があるかを把握します。すべてのキーボードを同じ文字セットにマッピングする際に問題が発生する可能性があることに注意してください。これは、一部のキーボードには他のキーボードにないキー (Microsoft の「Windows」キーと Apple コマンド キーなど) があるためです。少し試行錯誤が必要かもしれません。

ああ、 JavaScript の狂気: キーボード イベントという記事が興味深いかもしれません。

于 2011-10-07T12:33:57.347 に答える