【问题标题】:javascript - detect ctrl key pressed or up, keypress event doesn't triggerjavascript - 检测 ctrl 键被按下或向上,keypress 事件不会触发
【发布时间】:2012-03-11 14:34:34
【问题描述】:

我在这里看到了一些类似的问题(例如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

【问题讨论】:

  • 这不是:if (e.ctrlKey) { .... } work..?

标签: javascript ctrl


【解决方案1】:

尝试使用if (e.ctrlKey)

MDN: event.ctrlKey

【讨论】:

    【解决方案2】:

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

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

    注意:onkeypress 事件不会针对所有键(例如 ALT、CTRL、 SHIFT、ESC)在所有浏览器中。只检测用户是否有 按下一个键,请改用 onkeydown 事件,因为它适用于 所有键。

    【讨论】:

    • 一个好奇心是Enter == 13 的键码,而Ctrl + Enter == 10 的键码。
    【解决方案3】:

    您的事件有一个名为 ctrlKey 的属性。您可以检查此项以查看该键是否被按下。请参阅下面的 sn-p 以获取更多控制,例如键。

    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
    

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      相关资源
      最近更新 更多