Подтвердить что ты не робот

Javascript - обнаружение клавиши ctrl нажата или вверх, событие нажатия клавиши не запускается

Здесь я вижу некоторые подобные вопросы (например, JavaScript: проверьте, нажата ли кнопка CTRL), но моя проблема - это фактически запуск события. Мой код js:

    // Listen to keyboard. 
    window.onkeypress = listenToTheKey;
    window.onkeyup = listenToKeyUp;

    /*
        Gets the key pressed and send a request to the associated function
        @input key
    */
    function listenToTheKey(e)
    {
        if (editFlag == 0)
        {
            // If delete key is pressed calls delete
            if (e.keyCode == 46)
                deleteNode();

            // If insert key is pressed calls add blank
            if (e.keyCode == 45)
                createBlank();

            if (e.keyCode == 17)
                ctrlFlag = 1;
        }
    }

Событие запускается для любых других клавиш, кроме ctrl.
Мне нужно также запустить его для ctrl.
Я не могу использовать jQuery/prototype/независимо от того, что эти решения неприемлемы.

Итак... как я могу обнаружить ctrl?

4b9b3361

Ответ 1

Попробуйте использовать if (e.ctrlKey).

MDN: event.ctrlKey

Ответ 2

Ваше событие имеет свойство ctrlKey. Вы можете проверить это, чтобы посмотреть, нажата ли клавиша или нет. См. Ниже фрагмент ниже для большего контроля, например, клавиш.

function detectspecialkeys(e){
    var evtobj=window.event? event : e
    if (evtobj.altKey || evtobj.ctrlKey || evtobj.shiftKey)
        alert("you pressed one of the 'Alt', 'Ctrl', or 'Shift' keys")
}
document.onkeypress=detectspecialkeys

Ответ 3

Использование onkeydown, а не onkeypress, может помочь.

От http://www.w3schools.com/jsref/event_onkeypress.asp

Примечание. Событие onkeypress не запускается для всех ключей (например, ALT, CTRL, SHIFT, ESC) во всех браузерах. Чтобы определить, имеет ли пользователь нажмите клавишу, вместо этого используйте событие onkeydown, потому что оно работает для все клавиши.