53

我在这里看到了一些类似的问题(比如JavaScript: Check if CTRL button was pressed),但我的问题实际上是事件触发。我的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/whatever 所以这些解决方案是不可接受的。

那么......我怎样才能检测到ctrl

4

3 回答 3

68

尝试使用if (e.ctrlKey).

MDN:事件.ctrlKey

于 2012-02-21T09:27:26.350 回答
22

使用 onkeydown 而不是 onkeypress 可能会有所帮助。

来自http://www.w3schools.com/jsref/event_onkeypress.asp

注意:onkeypress 事件并非针对所有浏览器中的所有键(例如 ALT、CTRL、SHIFT、ESC)触发。要仅检测用户是否按下了某个键,请改用 onkeydown 事件,因为它适用于所有键。

于 2016-02-25T05:08:25.230 回答
18

您的事件有一个名为 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
于 2012-02-21T09:28:15.100 回答