web-dev-qa-db-fra.com

javascript - détecter la touche ctrl enfoncée ou vers le haut, l'événement de pression de touche ne se déclenche pas

Je vois des questions similaires ici (comme JavaScript: vérifier si le bouton CTRL a été enfoncé ) mais mon problème est en fait le déclenchement de l'événement. Mon code 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;
        }
    }

L'événement se déclenche pour toute autre clé à l'exception de ctrl.
Je dois également le déclencher pour ctrl.
Je ne peux pas utiliser jQuery/prototype/que ce soit donc ces solutions ne sont pas acceptables.

Alors ... comment puis-je détecter le ctrl?

40
zozo

Essayez d'utiliser if (e.ctrlKey).

MDN: event.ctrlKey

47
Ash Clarke

Utiliser onkeydown plutôt que onkeypress peut aider.

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

Remarque: L'événement onkeypress n'est pas déclenché pour toutes les touches (par exemple ALT, CTRL, SHIFT, ESC) dans tous les navigateurs. Pour détecter uniquement si l'utilisateur a appuyé sur une touche, utilisez plutôt l'événement onkeydown, car il fonctionne pour toutes les touches.

16
Danielle Cerisier

Votre événement a une propriété nommée ctrlKey. Vous pouvez vérifier cela pour voir si la touche a été enfoncée ou non. Voir l'extrait ci-dessous pour plus de contrôle comme les clés.

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
16
Rick Hoving