JavaScript - обнаружить нажатие клавиши Ctrl или вверх, событие нажатия клавиши не срабатывает - PullRequest
39 голосов
/ 21 февраля 2012

Здесь я вижу несколько похожих вопросов (например, 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 ?

Ответы [ 3 ]

47 голосов
/ 21 февраля 2012

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

MDN: event.ctrlKey

16 голосов
/ 21 февраля 2012

Ваше событие имеет свойство с именем 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
14 голосов
/ 25 февраля 2016

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

С http://www.w3schools.com/jsref/event_onkeypress.asp

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

...