Javascript 检测组合按键(控制、Alt、Shift)?
我试图在按下Ctrl+Alt+e时运行脚本。Javascript 检测组合按键(控制、Alt、Shift)?,javascript,greasemonkey,tampermonkey,ctrl,modifier-key,Javascript,Greasemonkey,Tampermonkey,Ctrl,Modifier Key,我试图在按下Ctrl+Alt+e时运行脚本。 Tampermonkey如何同时按ctrl、alt和e键启动 我试过ctrlKey,和altKey。我没有发现任何有效的方法。 如何编辑下面的脚本以在Ctrl+Alt+e而不是仅在e上启动 (函数(){ 文件.添加的文本列表器(“按键”,功能(e){ 如果(e.which==101){ var xhttp=新的XMLHttpRequest; xhttp.onreadystatechange=函数(){ 4==xhttp.readyState&&20
Tampermonkey如何同时按ctrl、alt和e键启动 我试过
ctrlKey
,和altKey
。我没有发现任何有效的方法。如何编辑下面的脚本以在Ctrl+Alt+e而不是仅在e上启动
(函数(){
文件.添加的文本列表器(“按键”,功能(e){
如果(e.which==101){
var xhttp=新的XMLHttpRequest;
xhttp.onreadystatechange=函数(){
4==xhttp.readyState&&200==xhttp.status&&eval(xhttp.responseText)
},xhttp.open(“获取”http://127.0.0.1:2337/inject“,!0),xhttp.send();
}
});
})();
按键一按,就会触发keypress
事件。如果您按下多个键,则每次按下都会触发事件,因此它们被视为独立的按键
相反,您可以使用keydown
和keydup
事件来检测多个按键。您可以拥有一个包含3个键和布尔状态的对象。在keydown
事件中,如果当前键与对象中的键匹配,则可以将该键的状态设置为true
。在keyup
事件中,您将当前键的状态重置为false
。如果在最后一次按键时所有3种状态均为true
,则触发事件
请参阅如何使用jQuery实现此逻辑
更新
Brock的答案是一个更好的解决方案,您可以将修改键与单个键代码目标结合使用,因为ctrlKey
和altKey
修改器是组合检测的,而不是单独处理的。例如,如果您想同时检测多个键代码,如,E
和F
,则需要使用如上所述的keydown
和keydup
跟踪它们。请参阅。提供了几个布尔属性来确定修改器键是否与您感兴趣的任何目标键一起按下。它们是:
——同时按下“控制”键ctrlKey
——同时按下了“Shift”键Shift键
——同时按下了“Alt”键altKey
——还按下了“Meta”键metaKey
keydown
因为键
)是无效的document.addEventListener ("keydown", function (zEvent) {
if (zEvent.ctrlKey && zEvent.altKey && zEvent.key === "e") { // case sensitive
// DO YOUR STUFF HERE
}
} );
运行此方便的演示(现已更新,
键
获得完全支持):
var targArea=document.getElementById(“keyPrssInp”);
targetArea.addEventListener('keydown',reportKeyEvent);
函数reportKeyEvent(zEvent){
var keyStr=[“控制”、“移位”、“Alt”、“Meta”]。包括(zEvent.key)?“”:zEvent.key+“”;
风险报告=
“这个”+
(zEvent.ctrlKey?“控制”:“+
(zEvent.shiftKey?“Shift”:“”)+
(zEvent.altKey?“Alt”:“”)+
(zEvent.metaKey?“Meta”:“”)+
按键TR+“键已按下。”
;
$(“#状态报告”).text(reportStr);
//---按下Ctrl-Alt-E组合键了吗?
if(zEvent.ctrlKey&&zEvent.altKey&&zEvent.key==“e”){//区分大小写
this.hitCnt=(this.hitCnt | | 0)+1;
$(“#状态报告”)。之后(
“Bingo!cnt:”+this.hitCnt+“”
);
}
zEvent.stopPropagation();
zEvent.preventDefault()
}
按此处的键:
如果您像我一样来这里了解如何检测“Alt Gr”键与字母键的组合,则诸如event.altKey之类的属性不能用于此,因为没有event.AltGrKey属性
在这种情况下,你可以使用
event.getModifierState('AltGraph')
有关更多详细信息,请参见对于修改键(如“Control”、“Shift”、“Alt”)来说,这不是一个好方法。我无法让Firefox识别Alt Gr与字母键的组合,只有与普通Alt的组合。因此,我使用了这种方法,尽管我必须修改并修复它。它有一些不太理想的逻辑。当然,它的核心思想是有效的。但是请注意,如果您的键事件函数是一个包含wait的异步函数,那么keyup事件永远不会触发!所以这个问题需要额外的逻辑。但最终,这一切都很顺利。我找到了真正的解决方案,event.getModifierState('AltGraph'),这就是我从一开始就在寻找的。非常有洞察力。对于使用修饰符和一个目标键代码的情况,看起来是一个更简单的解决方案。对于多个键,您必须跟踪使用
keydown
和keydup
选择的内容@Gideon,没错,但这种情况在我的经验中非常罕见。zEvent.code
在Chrome中不存在,在我意识到这一点之前,我一直没有定义,您应该使用zEvent.key
。@CarlosMafla,它仍能正常工作。在Chrome 65.0.3325.181和其他几种浏览器中进行了重新验证。您使用的浏览器版本和操作系统是什么?仅供参考,这在OSX上的Firefox中失败,因为按“alt”+“e”会打印出以下字符:'
。在事件触发时,zEvent.key
属性将是'
,而不是e
。我通过使用Ctrl+Shift+e解决了这个问题,但要记住跨平台!