web-dev-qa-db-ja.com

コマンドキーのjQueryキーコード

jQuery Event Keypress:どのキーが押されましたか? および jqueryでクリックイベント中にキーが押されたかどうかを確認するにはどうすればよいですか?

しかし、私の質問は、すべてのブラウザで同じキーイベントを取得できるかどうかです。現在、Firefoxは command ボタン(Mac)224 Chromeで、Safariは値91を指定します。ユーザーが使用しているブラウザを確認し、そのキーを押したり、すべてのブラウザで1つのキーコードを取得できるようにする方法?メモで値を取得しています:

var code = (evt.keyCode ? evt.keyCode : evt.which);

プラグインについて知る必要があるという理由だけで、可能であればプラグインを使用したくない command/ctrl (Windowsシステム)キーが押されました。

47
Craig

jQueryはすでにそれを処理しています。コントロールが押されたかどうかを確認するには、次を使用する必要があります。

$(window).keydown(function (e){
    if (e.ctrlKey) alert("control");
});

修飾キーのリスト:

e.ctrlKey
e.altKey
e.shiftKey

そして、ファッジが示唆したように:

e.metaKey

MACで動作する可能性があります。他の方法もここにあります

81
BrunoLM

正確な瞬間に興味がなければ Command キーが押された場合、別のキーが押されたときに押されたかどうかだけで、イベントのmetaKeyプロパティを使用できます。

それ以外の場合、keydownおよびkeyupイベントの場合、必要なプロパティはすべてのブラウザーでkeyCodeです。残念ながら、 Command キーは、すべてのブラウザで同じキーコードを持っているわけではなく、左右 CommandsはWebKitで異なる値を持っています(それぞれ91と93)。何らかのブラウザスニッフィングなしでこれらのキーを検出する簡単な方法はありませんが、あるかもしれません。 whichプロパティは間違いなく役に立ちません。

詳細については、 http://unixpapa.com/js/key.html にすべての主要なブラウザーでの主要なイベント処理の包括的なカバレッジがあります。

11
Tim Down

では、この実行可能なコードスニペットで実際に試してみてください。

$(window).on('keypress', function(event) {
  $("body").append($("<p>").text(
       "ctrlKey " + event.ctrlKey
    + "; altKey " + event.altKey
    + "; metaKey " + event.metaKey
    + "; shiftKey " + event.shiftKey
    + "; isCommandPressed " + isCommandPressed(event)
  ));
  
});

function isCommandPressed(event) {
  return event.metaKey && ! event.ctrlKey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p>Focus on this select control and try pressing keys:</p>

<p><select><option>Test</option></select></p>
2
Flimm