Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Javascript中当前按下的所有键的列表_Javascript - Fatal编程技术网

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

获取Javascript中当前按下的所有键的列表,javascript,Javascript,在Javascript中,我想编写一个函数,返回当前按下的所有键的列表(这样我就可以允许用户创建自定义键盘快捷键)。有没有办法在Javascript中获得当前按下的所有键的列表? 每当按下某个键时,将发送一个向下键事件 每当释放钥匙时,将触发keyup事件 因此,您只需将密钥保存在一个数组中,并检查您的组合是否为真 例子 请注意,您应该尽可能使用e.key而不是e.keyCode(在本例中,var-key={},因为e.key是一个字符串)。改进了前面的答案,我编写了一个演示,在keydown

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

  • 每当按下某个键时,将发送一个
    向下键
    事件
  • 每当释放钥匙时,将触发
    keyup
    事件
因此,您只需将密钥保存在一个数组中,并检查您的组合是否为真

例子
请注意,您应该尽可能使用
e.key
而不是
e.keyCode
(在本例中,
var-key={}
,因为
e.key
是一个字符串)。

改进了前面的答案,我编写了一个演示,在keydown和keydup上打印按下的键列表

var-keys=[];
document.body.innerHTML=“当前按下的键:”
window.addEventListener(“向下键”,
职能(e){
密钥[e.keyCode]=e.keyCode;
var keysArray=getNumberArray(键);
document.body.innerHTML=“当前按下的键:”+keysArray;
if(keysArray.toString()=“17,65”){
document.body.innerHTML+=“全选!”
}
},
假);
window.addEventListener('keyup',
职能(e){
密钥[e.keyCode]=假;
document.body.innerHTML=“当前按下的键:”+getNumberArray(键);
},
假);
函数getNumberArray(arr){
var newArr=新数组();
对于(变量i=0;i
我还没有找到答案,但可以(也许)修改此代码示例以实现此目的:场景:您按住一个文档处于焦点的键,单击URL框,然后放开该键。keyup永远不会被触发,但密钥已启动,导致列表不正确。什么是恶意的?浏览器应该提供一个按键列表。浏览器已经提供了一系列按下的游戏板按钮。也许操作系统甚至应该为应用程序提供一个按键列表。@user3015682:“
应该做
”可能是一个解决方案,但在这种情况下,您需要联系
的开发人员;)@Zeta至少,如果你联系操作系统或浏览器,你只需要纠缠2到3家公司,而不是数百万为操作系统或浏览器平台开发的公司。而且,至少在windows上,操作系统确实为应用程序提供了键盘状态,所以这实际上只是浏览器的问题。任何时候在基于windows的PC游戏中发生这种情况,都是游戏本身的愚蠢错误。这个答案绝不可靠。例如,当浏览器的焦点被拉走时,操作系统这样做并不罕见。甚至Chrome也允许一个页面从另一个页面中删除焦点(例如:日历通知)。。这将中断基于键盘事件的跟踪。您将拥有一个不会抛出keyup事件的keydown。顺便说一句,问题是如何获得按键列表。从一些信息中创建这个功能似乎与所要求的完全不同。应该注意的是,它受到相同的限制:如果焦点离开,你永远不会得到keyDown事件。例如(Chrome):打开JSFIDLE,按Ctrl+D键触发书签。当你关闭它时,小提琴仍然会显示为按下,因为它没有得到按键事件。
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();
    }
}
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;
}
​