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