50

我已阅读jQuery Event Keypress:按下了哪个键?以及如何使用 jquery 检查在单击事件期间是否按下了键?

但是我的问题是,您是否可以为所有浏览器获得相同的关键事件?目前我知道 Firefox 为command按钮(Mac)提供代码 224,而 Chrome 和 Safari 为其提供值 91。 是简单检查用户正在使用的浏览器并将按键基于该浏览器的最佳方法,还是有办法这样我可以在所有浏览器中获得 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

正如 fudgey 建议的那样:

e.metaKey

可能适用于 MAC。这里还有其他一些方法

于 2010-09-30T19:41:26.267 回答
11

如果您对Command按键被按下的确切时刻不感兴趣,只是在按下另一个键时是否按下,那么您可以使用metaKey事件的属性。

否则,对于keydownkeyup事件,您需要的属性keyCode在所有浏览器中。不幸的是,Commandkey 在所有浏览器中的键码并不相同,并且左右Commands 在 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 回答