Chromebook Alt 键
Chromebook Alt Key
基本上,我使用的 Chromebook 无法区分 alt 键。如下图所示,左下角有一个(左起第二个键,我将其称为 ALT1),右下角有一个较小的键(右起第 5 个键,ALT2)。
(来源:computershopper.com)
我的代码有这个 if 函数,它由 alt 和 enter 键触发:
if (e.altKey && e.keyCode == 13) {
当我按下 ALT1 和回车键时,该功能按预期工作。但是,当我按下 ALT2 和回车键时,它所做的只是触发 'enter' 事件(因此,如果我在表单中,它将提交表单)。
为了解决这个问题,我尝试使用
if (e.keyCode == 18 && e.keyCode == 13) {
但是,ALT1 或 ALT2 都不适用。有什么想法吗?
您可以在此页面中测试您的两个 alt 键代码:http://keycode.info/
可能 Chromebook 为这两个 alt 键提供了不同的代码。
在现实生活中,同时发生的事件很少存在。我的意思是,无论您尝试同时按下两个键,您都不会完全同时成功。
您现在可以使用它了。
var key1pressed = false;
var key2pressed = false;
$("#somelement").keydown(function(e) {
if(e.which == 13) {
key1pressed = true;
}
if(e.which == 18) {
key2pressed = true;
}
keyspressed();
}).keyup(function(e) {
if(e.which == 13) {
key1pressed = false;
}
if(e.which == 18) {
key2pressed = false;
}
});
function keyspressed() {
if(key1pressed == true && key2pressed == true) {
alert("you pressed these 2 keys together");
}
}
我想这就是你的意思吧?
更新 2
我使用了原始代码的略微修改版本。
<script>
window.onkeydown = function (e) {
var enter1 = false;
if (e.keyCode == 13) {
var enter1 = true;
}
if (e.key === 'AltGraph') {
if (enter1 = true) {
//Do what Alt + Enter does
console.log("It worked");
}
}
if (e.altKey && e.keyCode == 13) {
//Do what Alt + Enter does
console.log("It worked");
}
};
</script>
这很有效:现在 ALT1 和 ALT2 都有效。
原答案:
通过使用此代码片段,我能够找出答案。
document.getElementById("ta").addEventListener("keydown", function(e) {
var keyLocation = ["Standard", "Left", "Right", "Numpad", "Mobile", "Joystick"][e.location];
var message = "Key '" + (e.key || e.keyIdentifier || e.keyCode) + "' is down. Location: " + keyLocation;
this.value += "\n" + message;
e.preventDefault();
}, false);
<textarea id="ta" rows="10" cols="50">Click on here and press some modifier keys such as Shift</textarea>
ALT1 注册为 'Alt',而 ALT2 显示为 'AltGraph'。根据维基百科,AltGraph 键是:
AltGr (also Alt Graph, Alt Graphic, Alt Graphics, Alt Grammar, Alt Car, or Right Alt[1]) is a modifier key found on some computer keyboards and is primarily used to type characters that are unusual for the locale of the keyboard layout
知道这一点,我可以很容易地从
修改我原来的 "if" 语句
if (e.altKey && e.keyCode == 13) {
至此
if (e.altKey && e.keyCode == 13 || e.key === 'AltGraph' && e.keyCode == 13) {
但是,我 运行 遇到了一个问题,一直没能弄明白。
if (e.key === 'AltGraph') {
工作得很好:但是,当我尝试
if (e.key === 'AltGraph' && e.keyCode == 13) {
没用。我不知道如何,如果有人能弄清楚,我会接受他们的回答。但是,就目前而言,我的回答包含与遇到类似问题的其他人最相关的信息。
更新:
我已经找出错误 - 但是,我无法修复它。此代码工作正常
if (e.shiftKey && e.key === 'AltGraph') {
因为我用的是e.shiftKey而不是e.keycode == 'shift key code'.
但是,enter 没有与此等效的内容。使用下面的 'template',它适用于 Shift、Ctrl 和 Alt- 但是,不适用于 enter。有什么想法吗?
event.[key]Key
作为参考,我用这些问题来寻找答案
Is there a way to detect which side the Alt key was pressed on (right or left)?
Detect Alt Gr (Alt Graph) modifier on key press
基本上,我使用的 Chromebook 无法区分 alt 键。如下图所示,左下角有一个(左起第二个键,我将其称为 ALT1),右下角有一个较小的键(右起第 5 个键,ALT2)。
(来源:computershopper.com)
我的代码有这个 if 函数,它由 alt 和 enter 键触发:
if (e.altKey && e.keyCode == 13) {
当我按下 ALT1 和回车键时,该功能按预期工作。但是,当我按下 ALT2 和回车键时,它所做的只是触发 'enter' 事件(因此,如果我在表单中,它将提交表单)。
为了解决这个问题,我尝试使用
if (e.keyCode == 18 && e.keyCode == 13) {
但是,ALT1 或 ALT2 都不适用。有什么想法吗?
您可以在此页面中测试您的两个 alt 键代码:http://keycode.info/
可能 Chromebook 为这两个 alt 键提供了不同的代码。
在现实生活中,同时发生的事件很少存在。我的意思是,无论您尝试同时按下两个键,您都不会完全同时成功。
您现在可以使用它了。
var key1pressed = false;
var key2pressed = false;
$("#somelement").keydown(function(e) {
if(e.which == 13) {
key1pressed = true;
}
if(e.which == 18) {
key2pressed = true;
}
keyspressed();
}).keyup(function(e) {
if(e.which == 13) {
key1pressed = false;
}
if(e.which == 18) {
key2pressed = false;
}
});
function keyspressed() {
if(key1pressed == true && key2pressed == true) {
alert("you pressed these 2 keys together");
}
}
我想这就是你的意思吧?
更新 2
我使用了原始代码的略微修改版本。
<script>
window.onkeydown = function (e) {
var enter1 = false;
if (e.keyCode == 13) {
var enter1 = true;
}
if (e.key === 'AltGraph') {
if (enter1 = true) {
//Do what Alt + Enter does
console.log("It worked");
}
}
if (e.altKey && e.keyCode == 13) {
//Do what Alt + Enter does
console.log("It worked");
}
};
</script>
这很有效:现在 ALT1 和 ALT2 都有效。
原答案:
通过使用此代码片段,我能够找出答案。
document.getElementById("ta").addEventListener("keydown", function(e) {
var keyLocation = ["Standard", "Left", "Right", "Numpad", "Mobile", "Joystick"][e.location];
var message = "Key '" + (e.key || e.keyIdentifier || e.keyCode) + "' is down. Location: " + keyLocation;
this.value += "\n" + message;
e.preventDefault();
}, false);
<textarea id="ta" rows="10" cols="50">Click on here and press some modifier keys such as Shift</textarea>
ALT1 注册为 'Alt',而 ALT2 显示为 'AltGraph'。根据维基百科,AltGraph 键是:
AltGr (also Alt Graph, Alt Graphic, Alt Graphics, Alt Grammar, Alt Car, or Right Alt[1]) is a modifier key found on some computer keyboards and is primarily used to type characters that are unusual for the locale of the keyboard layout
知道这一点,我可以很容易地从
修改我原来的 "if" 语句if (e.altKey && e.keyCode == 13) {
至此
if (e.altKey && e.keyCode == 13 || e.key === 'AltGraph' && e.keyCode == 13) {
但是,我 运行 遇到了一个问题,一直没能弄明白。
if (e.key === 'AltGraph') {
工作得很好:但是,当我尝试
if (e.key === 'AltGraph' && e.keyCode == 13) {
没用。我不知道如何,如果有人能弄清楚,我会接受他们的回答。但是,就目前而言,我的回答包含与遇到类似问题的其他人最相关的信息。
更新:
我已经找出错误 - 但是,我无法修复它。此代码工作正常
if (e.shiftKey && e.key === 'AltGraph') {
因为我用的是e.shiftKey而不是e.keycode == 'shift key code'.
但是,enter 没有与此等效的内容。使用下面的 'template',它适用于 Shift、Ctrl 和 Alt- 但是,不适用于 enter。有什么想法吗?
event.[key]Key
作为参考,我用这些问题来寻找答案
Is there a way to detect which side the Alt key was pressed on (right or left)?
Detect Alt Gr (Alt Graph) modifier on key press