1

Mac で (Chrome を使用して) 次のコードを実行し、コマンド キーを押すと、metaKey はキーダウン用に設定されますが、キーアップ用には設定されません。私は何か間違ったことをしていますか?JavaScript内で使用できるように、押されたメタキーを追跡しようとしています-より良い方法があれば教えてください:-)

   var metaPressed = false;
   $(document).keydown(function(e) {
     console.log('keydown ' + e.keyCode);
     if (e.metaKey || e.ctrlKey) {
       console.log('meta pressed');
       metaPressed = true;
     }
   });
   $(document).keyup(function(e) {
     console.log('keyup ' + e.keyCode);
     if (e.metaKey || e.ctrlKey) {
       console.log('meta unpressed');
       metaPressed = false;
     }
   });

関連するキーのコンソール出力は次のとおりです

// Pressing cmd
keydown 91
meta pressed
keyup 91

// Pressing control 
keydown 17
meta pressed 
keyup 17

// Pressing non-meta like spacebar
keydown 32
keyup 32
4

3 に答える 3

1

jQueryが修飾キーを処理する方法を誤解していました。正しく考えさせてくれたプロンプトをくれた @adeneo に感謝します。

また、メタ文字を押しながらキーを押した場合 (たとえば、Mx を押した場合)、jQuery は、'M' も離されるまで、'x' のキーアップを送信しません。だから「メタダウン×ダウン×アップ×メタアップ」の心配がありません。

于 2014-09-28T19:54:17.353 に答える
0

キーアップからその情報を取得することはできません。これをテストケースとして使用することをお勧めします(e.keyCode === 17 || e.keyCode === 91)(それぞれCTRLとMETAです)

于 2014-09-28T19:36:11.867 に答える