50

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

ただし、私の質問は、すべてのブラウザーで同じキーイベントを取得できるかどうかです。現在、Firefoxはボタン(Mac)にコード224を与え、ChromeとSafariはそれに値91を与えることを知ってcommandいます。ユーザーが使用しているブラウザーを確認し、それに基づいてキーを押すのが最善の方法です。すべてのブラウザで1つのキーコードを取得できますか?私は次の値で値を取得していることに注意してください:

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

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

4

3 に答える 3

83

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

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

修飾キーのリスト:

e.ctrlKey
e.altKey
e.shiftKey

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

e.metaKey

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

于 2010-09-30T19:41:26.267 に答える
11

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

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

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

于 2010-09-30T19:44:08.550 に答える
3

さあ、この実行可能なコードスニペットでこれをライブで試してみてください。

$(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>

于 2016-04-29T10:39:48.030 に答える