【问题标题】:Why am I unable to get the alt key pressed?为什么我无法按下 alt 键?
【发布时间】:2013-05-19 15:37:38
【问题描述】:

我试图让Alt 键将快捷方式设置为Shift+Alt+ACtrl+Alt+A,但是当按下`ShiftCtrl 键时,我无法确定Alt 键是否被按下按下与否 .下面的代码让问题更清楚了。

    el.onkeydown=function(e){
    //alert(e.keyCode);

    if(e.shiftKey==true){
    document.body.appendChild(document.createTextNode("shiftkey"));
    document.body.appendChild(document.createElement("br"));
    }
    else if(e.ctrlKey==true){
    document.body.appendChild(document.createTextNode("ctrlkey"));
    document.body.appendChild(document.createElement("br"));
    }
    else if(e.altKey==true){
    document.body.appendChild(document.createTextNode("altkey"));
    document.body.appendChild(document.createElement("br"));
    }
    };

当我尝试在ShiftCtrl 键之后按Alt 键时,e.altKey 没有得到 true 的值,我得到的结果为

    shiftkey
    shiftkey
    shiftkey
    shiftkey
    shiftkey
    shiftkey...

或者Ctrl

    ctrlkey
    ctrlkey
    ctrlkey
    ctrlkey
    ctrlkey
    ctrlkey
    ctrlkey...

【问题讨论】:

    标签: javascript events browser keyboard-shortcuts


    【解决方案1】:

    设计缺陷。您正在检查 shiftKey 是否被按下。如果不是,那么您检查其他人。让我们一步一步想。

    你先按 shift 键。事件触发,并且您的第一个条件得到满足。现在,当您按下 alt 键时,您的 keydown 事件将再次被调用,而这一次,由于您同时按住了 shiftalt,因此满足了第一个和第三个条件。 然而,程序永远不会到达第三个条件,因为它在一个 else 子句中。这意味着只评估您的第一个条件的代码,其余条件将被跳过,因为第一个条件为真。

    更改您的设计以单独检查所有键,而不是每个都使用else 子句。

    您的代码如下所示:

    el.onkeydown=function(e){
    //alert(e.keyCode);
    
    if(e.shiftKey==true){
    document.body.appendChild(document.createTextNode("shiftkey"));
    document.body.appendChild(document.createElement("br"));
    }
    if(e.ctrlKey==true){
    document.body.appendChild(document.createTextNode("ctrlkey"));
    document.body.appendChild(document.createElement("br"));
    }
    if(e.altKey==true){
    document.body.appendChild(document.createTextNode("altkey"));
    document.body.appendChild(document.createElement("br"));
    }
    };
    

    想想这个例子,让你的缺陷更清楚:

    if(true){
        console.log('First');
    }
    else if(true){
        console.log('Second');
    }
    

    可以看出,第二个条件是否为真并不重要,只要第一个条件成立即可。

    但是,在您的情况下,使用 && 逻辑运算符会更有意义,因为您只想在按住所有三个键以创建快捷方式时执行某些操作。那会让你的代码像这样:

    if(e.shiftKey && e.altKey && e.keyCode === 65){
        console.log('Shortcut active');
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 2020-05-07
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多