zozo
zozo

Reputation: 8582

javascript - detect ctrl key pressed or up, keypress event doesn't trigger

I see some similar questions here (like JavaScript: Check if CTRL button was pressed) but my problem is actually the event triggering. My js code:

    // 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;
        }
    }

The event triggers for any other keys except the ctrl.
I need to also trigger it for ctrl.
I can't use jQuery/prototype/whatever so those solutions are not acceptable.

So... how can I detect the ctrl?

Upvotes: 57

Views: 88745

Answers (4)

Inglan
Inglan

Reputation: 89

This is basically Rick Hoving's answer, but it uses keydown like Danielle Cerisier suggests

function detectspecialkeys(e) {
  var evtobj = window.event ? event : e
  if (evtobj.ctrlKey)
    console.log("You pressed ctrl")
}
document.onkeydown = detectspecialkeys
Please note that you may have to click inside the preview box to focus before pressing ctrl

Upvotes: 1

Danielle Cerisier
Danielle Cerisier

Reputation: 561

Using onkeydown rather than onkeypress may help.

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

Note: The onkeypress event is not fired for all keys (e.g. ALT, CTRL, SHIFT, ESC) in all browsers. To detect only whether the user has pressed a key, use the onkeydown event instead, because it works for all keys.

Upvotes: 24

Ash Clarke
Ash Clarke

Reputation: 4887

Try using if (e.ctrlKey).

MDN: event.ctrlKey

Upvotes: 75

Rick Hoving
Rick Hoving

Reputation: 3575

Your event has a property named ctrlKey. You can check this to look if the key was pressed or not. See snippet below for more control like keys.

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

Upvotes: 18

Related Questions