Я хотел бы реализовать горячие клавиши с таким поведением:
Удерживайте Alt, нажмите A, отпустите A, нажмите 1, отпустите 1, отпустить Alt
Затем выполните некоторую логику, связанную с горячей клавишей Alt-A1.
Я думал, что могу отслеживать все клавиши между нажатием клавиши и нажатием клавиши Alt. Но, к сожалению, в итоге я не могу поймать событие нажатия клавиши для Alt.
Как ни странно, когда я нажимаю только Alt, я улавливаю как событие нажатия клавиши, так и событие нажатия клавиши. Но когда я нажимаю что-то еще, удерживая Alt (даже Alt-A, для примера), кажется, что имеет место какая-то другая логика и подавляет событие нажатия клавиши для Alt.
Это какая-то проблема с IE (я пробовал с IE8 и IE11)? Потому что я могу поймать это, например, в Chrome. Какой подход вы порекомендуете здесь?
UPD: на самом деле есть ошибка, закрытая как не воспроизводимая командой Internet Explorer: https://connect.microsoft.com/IE/feedback/details/807606/ie-does-not-catch-keyup-for-alt-button-after-press-key-сочетание
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() == "18,65"){
document.body.innerHTML += " Did it!"
}
},
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;
}