【发布时间】:2012-11-30 06:21:50
【问题描述】:
在 Javascript 中,我想编写一个函数,该函数返回当前按下的所有键的列表(这样我就可以允许用户创建自定义键盘快捷键。)有没有办法获得所有当前按下的键的列表Javascript 中的键?
【问题讨论】:
-
我还没有找到答案,但是可以(也许)修改此代码示例以执行此操作:stackoverflow.com/a/6473318/975097
标签: javascript
在 Javascript 中,我想编写一个函数,该函数返回当前按下的所有键的列表(这样我就可以允许用户创建自定义键盘快捷键。)有没有办法获得所有当前按下的键的列表Javascript 中的键?
【问题讨论】:
标签: javascript
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 是一个字符串)。
【讨论】:
<x> 应该做<y>" 可能是一个解决方案,但在这种情况下您需要联系<x> 的开发人员; )。
在上一个答案的基础上改进,我写了一个演示,在 keydown 和 keyup 上打印按下的键列表。
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;
}
【讨论】:
Ctrl+D:触发书签。当你关闭它时,小提琴仍然会显示为按下,因为它没有得到 keyDown 事件。