命令键的jQuery密钥代码

Cra*_*aig 47 javascript jquery command keydown onkeyup

我读过jQuery Event Keypress:按下了哪个键?我如何检查与jQuery单击事件过程中按下键?

但是我的问题是,如果你能为所有浏览器获得相同的关键事件?目前我知道Firefox给command按钮(Mac)代码224,而Chrome和Safari给它91值.是最好的方法来简单地检查用户正在使用什么浏览器并基于按下的键或是否有办法我可以在所有浏览器中获得1个关键代码吗?注意我得到的值是:

var code = (evt.keyCode ? evt.keyCode : evt.which);
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我很想不使用插件只是因为我只需要知道按下的command/ ctrl(windows系统)键.

Bru*_*oLM 81

jQuery已经处理过了.要检查是否按下了控件,您应该使用:

$(window).keydown(function (e){
    if (e.ctrlKey) alert("control");
});
Run Code Online (Sandbox Code Playgroud)

修饰键列表:

e.ctrlKey
e.altKey
e.shiftKey
Run Code Online (Sandbox Code Playgroud)

而且随着狡猾的建议:

e.metaKey
Run Code Online (Sandbox Code Playgroud)

可能在MAC上工作.这里还有其他一些方法.

  • @Craig,尝试使用`if(e.metaKey || e.ctrlKey){...}` (41认同)
  • @Vess,如果你只想要`Ctrl + X`,只需检查`e.ctrlKey`.如果你只想要`Command + X`而不是`Ctrl + X`,请检查`e.metaKey &&!e.ctrlKey`. (8认同)
  • 在Windows上,如果按下Ctrl键,jQuery将`e.metaKey`设置为`true`,所以对于你想要的只是`if(e.metaKey){...}`就足够了.但是,我有相反的问题.我想将一个函数绑定到Ctrl-X,但_not_绑定到Command-X.我找不到一种优雅的方式(我的意思是,不检查用户代理). (5认同)
  • 在Windows上按下Control键时,jQuery不设置metaKey.所以你确实需要`if(e.metaKey || e.ctrlKey){...}` (4认同)
  • 如果操作系统是Mac,我希望它是commandkey,如果它是Windows,我希望它是ctrl,所以简单地使用ctrlKey不起作用. (3认同)

Tim*_*own 11

如果您对Command按下按键的确切时刻不感兴趣,只需按下另一个按键时是否按下该按键,即可使用metaKey该事件的属性.

否则,对于keydownkeyup事件,您需要的属性keyCode在所有浏览器中.不幸的是,Command密钥在所有浏览器中没有相同的密钥代码,左右Commands在WebKit中分别具有不同的值(分别为91和93).没有某种浏览器嗅探,我看不到一种检测这些密钥的简单方法,但可能有一种.该which物业绝对不会帮助你.

有关详细信息,请访问http://unixpapa.com/js/key.html,全面了解所有主流浏览器中的关键事件处理.

  • @Jason:嘿.我看到了另一个答案,并一直在等待借口使用它:) (3认同)