带“Ctrl,Shift或Alt”的Keydown事件不会在Windows上触发

问题描述:

我想知道当用户在鼠标移动过程中按下Shift键时。带“Ctrl,Shift或Alt”的Keydown事件不会在Windows上触发

的问题是,按下Ctrl键Alt键当Windows不会触发keydown事件。相反,事件在释放密钥时触发。在Mac上,一切都按预期工作,但是(按下按键时触发keydown)

关于鼠标移动事件的相同问题。 event.shiftKey将只有在你按下Shift并触发了mousedown后才为真...

是否有任何解决方法?这里有一个例子:https://jsfiddle.net/ecz0deqw/4/

document.onkeydown = function (e) { 
    addText('Key pressed: ' + e.key) 
}; 
document.onmousemove = function (e) { 
    if(e.shiftKey) 
     addText('ShiftMove'); 
    else { 
     addText('NoShift') 
    } 
} 
function addText(text) { 
    var newP = document.createElement("p"); 
    newP.innerText = text; 
    document.body.insertBefore(newP,document.body.childNodes[0]); 
} 

感谢/埃里克

+0

尝试在'document.body'而不是'document'上添加事件,并使用'addEventListener()'来做到这一点 –

+0

根据['keydown' spec](https://www.w3.org/ TR/DOM-Level-3-Events /#event-type-keydown)和[关于“修饰键”的规范](https://www.w3.org/TR/DOM-Level-3-Events/# keys-modifiers),应该提高'keydown'事件。 – Amy

+0

感谢您回复我!没有什么区别,这些键的事件在窗口上依然会触发“按键”而不是“按键”。 https://jsfiddle.net/ecz0deqw/7/ –

是您的Windows机器虚拟机? Parallels(至少)用修饰键做了一些有趣的事情。

Under Actions>Configure转至Mouse & Keyboard选项卡。在Keyboard标签旁边,选择Optimize for games

Parallels在该选项下面声明:“当键盘针对游戏进行优化时,修改键会变得更加灵敏。”

+0

非常感谢,现在该事件在keydown上触发。 Shiftdown仍然需要发生在mouseDown事件之前,我发现它似乎(正版Windows安装) –