获取Javascript中所有当前按下的键的列表

时间:2012-11-30 06:21:50

标签: javascript

在Javascript中,我想编写一个函数,返回当前按下的所有键的列表(这样我就可以允许用户创建自定义键盘快捷键。)有没有办法获取当前所有按键的列表Javascript中的密钥?

2 个答案:

答案 0 :(得分:6)

  • 只要按下某个键,就会发送keydown个事件
  • 每当发布密钥时,都会触发keyup事件

所以你只需要将键保存在一个数组中,然后检查你的组合是否正确。

实施例

var keys = [];
window.addEventListener("keydown",
    function(e){
        keys[e.keyCode] = true;
        checkCombinations(e);
    },
false);

window.addEventListener('keyup',
    function(e){
        keys[e.keyCode] = false;
    },
false);

function checkCombinations(e){
    if(keys["a".charCodeAt(0)] && e.ctrlKey){
        alert("You're not allowed to mark all content!");
        e.preventDefault();
    }
}

请注意,您应尽可能使用e.key而不是e.keyCode(在这种情况下为var key = {},因为e.key是一个字符串)。

答案 1 :(得分:4)

改进上一个答案,我编写了一个演示版,可以在mousedown和mouseup上打印按下的键列表。

Here it is on jsfiddle.

var keys = [];
document.body.innerHTML = "Keys currently pressed: "
window.addEventListener("keydown",
    function(e){
        keys[e.keyCode] = e.keyCode;
        var keysArray = getNumberArray(keys);
        document.body.innerHTML = "Keys currently pressed:" + keysArray;
        if(keysArray.toString() == "17,65"){
            document.body.innerHTML += " Select all!"
        }
    },
false);

window.addEventListener('keyup',
    function(e){
        keys[e.keyCode] = false;
        document.body.innerHTML = "Keys currently pressed: " + getNumberArray(keys);
    },
false);

function getNumberArray(arr){
    var newArr = new Array();
    for(var i = 0; i < arr.length; i++){
        if(typeof arr[i] == "number"){
            newArr[newArr.length] = arr[i];
        }
    }
    return newArr;
}
​