Событие нажатия клавиши Alt не работает в IE с буквенно-цифровой комбинацией

Я хотел бы реализовать горячие клавиши с таким поведением:

Удерживайте 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;
}


person Aleksei Loginov    schedule 28.02.2017    source источник
comment
Поместите в вопрос код, а не jsfiddle. В Stackoverflow есть фрагменты   -  person epascarello    schedule 28.02.2017
comment
Вы понимаете, что объект события сообщает вам, если нажаты клавиши alt, cmd, ctrl?   -  person epascarello    schedule 28.02.2017
comment
Ага, я это понимаю. Я попытался реализовать это, проверив все ключи после нажатия клавиши для Alt для условия event.altKey == true. Но потом я понял, что мне нужно дождаться другого ключа, который будет event.altKey == false, чтобы начать выполнение логики. Думаю, не лучшее решение.   -  person Aleksei Loginov    schedule 28.02.2017
comment
Только что обнаружена ошибка, закрытая как не воспроизводимая командой Internet Explorer: connect.microsoft.com/IE/feedback/details/807606/   -  person Aleksei Loginov    schedule 28.02.2017
comment
Клавиши Alt / Altgr используются IE для навигации по меню и значений атрибутов клавиш доступа на веб-страницах. Когда меню IE отображается, нажмите любую клавишу ... вы увидите, что фокус переместится в меню IE .... IE и webkit запускают нажатие клавиш, нажатие клавиш, нажатие клавиш по порядку. Поместите проверку в обработчик нажатия клавиш.   -  person Rob Parsons    schedule 01.03.2017
comment
@RobParsons Хороший совет. Но по какой-то причине я могу ловить только события keydown и keyup, но не нажатия клавиш. Если я изменю слушателя в фрагменте с keydown на keypress, у меня возникнут проблемы с перехватом события нажатия клавиши.   -  person Aleksei Loginov    schedule 01.03.2017
comment
объект окна находится наверху пузырей событий ... общий шаблон проектирования - назначать обработчики событий клавиатуры элементу ввода или элементу тела (документу).   -  person Rob Parsons    schedule 01.03.2017
comment
см. предыдущий вопрос stackoverflow.com/questions/2103385/javascript-event-sequence, который относится к отличной статье unixpapa.com/js/key.html. Клавиша alt не запускает событие нажатия клавиши. Честно говоря, вам лучше не использовать скриптовые сочетания клавиш для комбинаций клавиш Alt и функциональных клавиш.   -  person Rob Parsons    schedule 01.03.2017