Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript检测AltGr密钥_Javascript_Jquery_Keyboard - Fatal编程技术网

使用JavaScript检测AltGr密钥

使用JavaScript检测AltGr密钥,javascript,jquery,keyboard,Javascript,Jquery,Keyboard,如何澄清ALT+CTRL和ALTGR键的按下 我在这里找到了这段代码作为可能的解决方案,但它不起作用: if (event.ctrlKey && event.altKey) { } 此代码适用于alt+ctr和altGr 我有这样的情况:对于alt+ctrl+e(例如e,没关系),我想要一件事,对于altGr+e另一件事,我该怎么做 如果有人有什么想法,请告诉我。您可以使用位置来确定按下的是哪个alt。 为了支持Alt+Ctrl,我们将保存按下Alt的最后一个位置 Locat

如何澄清ALT+CTRL和ALTGR键的按下

我在这里找到了这段代码作为可能的解决方案,但它不起作用:

if (event.ctrlKey && event.altKey) {

}
此代码适用于alt+ctr和altGr

我有这样的情况:对于alt+ctrl+e(例如e,没关系),我想要一件事,对于altGr+e另一件事,我该怎么做


如果有人有什么想法,请告诉我。

您可以使用位置来确定按下的是哪个alt。 为了支持Alt+Ctrl,我们将保存按下Alt的最后一个位置

Location = 1 // Left
Location = 2 // Right 
然后,按下Alt和Ctrl键后,执行您的操作。在本例中,我们将只在result div中写入Alt侧。您还可以添加“e”按下条件:

if (e.ctrlKey && e.altKey && e.key == "e"){

HTML

<div class="cont">
    Click Alt + Ctrl<br /><br />
    <div id="res"></div>
</div>

您可以通过
事件
对象中
位置
属性的值来检测按下了哪个键(从右键或左键)。如果location属性的值为1(
e.location=1
),则按向左键。如果值为2,则按下右键

这里我提供了我的
RightAlter+RightCtrl+

检查这个例子
var isRightAltKey=false;
var isRightCtrlKey=false;
var validKeys=['a'、's'、'd'、'f'、'g']//如果不需要检查密钥,则保留空数组
文件.添加的文件列表器(“键控”,功能(e){
如果(e.key==“Alt”){
//按下right Alter时,使IsRight Alt键为true
isRightAltKey=(e.location==2);
}
否则如果(e.key==“控制”){
//按下右控制键时,使isRightCtrlKey为真,
//如果需要按下任何ctrl键,只需设置isRightCtrlKey=true;
isRightCtrlKey=(e.location==2);
}
//检查右键是否已按下?
var isRightKeys=isRightAltKey和&isRightCtrlKey;
//验证其他键[可选]
var isValidKey=((typeof validKeys==“未定义”)| | validKeys.length==0 | | validKeys.indexOf(e.key.toLowerCase())>=0);
如果(isRightKeys和isValidKey){
document.getElementById(“detect_key”).innerHTML=“RightAlt+RightCtrl+”+e.key;
}
其他的
{
document.getElementById(“detect_key”).innerHTML=“”;
}
},假);
文件.附录列表(“键控”,功能(e){
如果(e.key==“Alt”){
//释放右Alter时,使isRightAltKey为false
isRightAltKey=false;
}
否则如果(e.key==“控制”){
//释放右控件时,使isRightCtrlKey为false
isRightCtrlKey=false;
}
},假)

严格按照您的问题,以下是两种情况下的代码:

document.addEventListener ("keydown", function (zEvent) {
    if (zEvent.altKey  &&  zEvent.code === "KeyE") {
        if(zEvent.ctrlKey) {
            //Do Ctrl+Alt+E Stuff Here.
        } else {
            //Do Alt+E Stuff Here.
    }
});
现在把这里发生的事情分解一下
keydown
允许您检测多个按键


首先,我们检查是否按下了AltE键。如果是,我们接着检查Ctrl键是否也处于活动状态,并根据需要采取适当的操作。

你所说的altgr键是什么意思,它有:)@BhojendraNepal,他指的是正确的alt。@Mouser你怎么能确定?这取决于语言。当我将Windows 8.1设置为
Nl
时。它显示按键代码:
17/18
(意思是
ctrl-alt
),当我将其设置为
Us
时,它只显示
18
,意思是
alt
。所以
altgr
ctrl-alt
是一样的。答案是什么?你的答案和例子更有用。我会测试它。请检查我的答案,让我知道它满足了你的要求吗?@romaninsh,在给予赏金之前,你检查过我的答案了吗?而bouty回答为按键处理所有情况,似乎他只检测到了右侧键和左侧键。在右Alt键之后,它将第一次工作,然后用左Alt键按下。在这种情况下,它也可以工作,但根据您的要求,它不应该工作。@romanish试图保持代码结构尽可能干净。让我知道这是否符合你的目的。
document.addEventListener ("keydown", function (zEvent) {
    if (zEvent.altKey  &&  zEvent.code === "KeyE") {
        if(zEvent.ctrlKey) {
            //Do Ctrl+Alt+E Stuff Here.
        } else {
            //Do Alt+E Stuff Here.
    }
});