在MAC javascript中检测命令键

时间:2015-02-20 12:42:54

标签: javascript macos events keyboard

我在Extjs面板上监听keydown事件以执行某些操作。当我按ctrl + c,ctrl + v时,我复制,粘贴SVG对象。这适用于Windows操作系统和所有浏览器。但我有MAC的问题。我想检测MAC中的⌘+ C /⌘+ V. 简而言之,我想检测MAC中的⌘键。怎么做 ?有什么帮助吗?

getKeyboardAction :function(event){
    var isCtrlKeyPressed = event.ctrlKey;
    var isCopy = (isCtrlKeyPressed && event.keyCode == 67)?true:false;
    var isPaste = (isCtrlKeyPressed && event.keyCode == 86)?true:false;
    var isDuplicate = (isCtrlKeyPressed && event.keyCode == 68)?true:false;
    var isDelete = (event.keyCode ==46)?true:false;
    var isLeftArrow = (event.keyCode ==37)?true:false;
    var isUpArrow = (event.keyCode ==38)?true:false;
    var isRightArrow = (event.keyCode ==39)?true:false;
    var isDownArrow = (event.keyCode ==40)?true:false;
    var isEsc = (event.keyCode ==27)?true:false;
    var keyboardAction = null;

    if(isCopy)            return 'COPY';
    else if(isPaste)      return 'PASTE';
    else if(isDuplicate)  return 'DUPLICATE';
    else if(isDelete)     return 'DELETE';
    else if(isLeftArrow)  return 'MOVELEFT';
    else if(isUpArrow)    return 'MOVEUP';
    else if(isRightArrow) return 'MOVERIGHT';
    else if(isDownArrow)  return 'MOVEDOWN';
    else if(isEsc)        return 'ESCAPE';

    return null;
},

由于

1 个答案:

答案 0 :(得分:1)

要在OSX上可靠地捕获 CMD密钥,您需要监听keydownkeyup个事件,而不是keypress(不会触发)实例。要创建和捕获快捷方式,我会将任何 keyCode 推送到keydown上的数组,并删除keyup上的相同代码。

var pressedKeys = [ ];

$( document.body ).on('keydown', function( event ) {
    pressedKeys.push( event.which || event.keyCode );
});

$( document.body ).on('keyup', function( event ) {
    var pos;

    if( (pos = Private.pressedKeys.indexOf( event.which || event.keyCode )) > -1 ) {
        Private.pressedKeys.splice( pos, 1 );
    }
});