Javascript Mac中的Capslock未触发keyDown事件

Javascript Mac中的Capslock未触发keyDown事件,javascript,events,dom-events,keyboard-events,capslock,Javascript,Events,Dom Events,Keyboard Events,Capslock,铬(52): 打开caps lock时-仅触发keydown(keyUp或keyPress中无事件) 关闭caps lock时-仅触发keyup(keyDown或keyPress中无事件) FIREFOX(46): 仅为两个大写锁定打开和关闭触发keyDown事件(无keyUp或keyPress) 我已经在这里和MDN中阅读了有关键码和事件的信息 但是上面的链接都没有提到这种奇怪的行为。 这是预期的吗?如果是这样的话,有什么更简单的方法来处理吗?是的,这是意料之中的 Chrome将上盖视为key

铬(52):

打开caps lock时-仅触发keydown(keyUp或keyPress中无事件)

关闭caps lock时-仅触发keyup(keyDown或keyPress中无事件)

FIREFOX(46):

仅为两个大写锁定打开和关闭触发keyDown事件(无keyUp或keyPress)

我已经在这里和MDN中阅读了有关键码和事件的信息

但是上面的链接都没有提到这种奇怪的行为。 这是预期的吗?如果是这样的话,有什么更简单的方法来处理吗?

是的,这是意料之中的

Chrome将上盖视为keydown,因为它将开/关视为按住键,就像我们按住shift键一样,按住shift键可以打开行为上的盖,松开时关闭。此Caps Lock按钮也会锁定。当您打开Caps Lock时,chrome会将的“打开”按钮作为
按键来处理,而当您的“关闭”按钮作为
按键来处理。但是,firefox以按键方式处理所有事情,这与chrome处理相同内容的方式相比毫无意义

解决方案

您应该使用来获取
大写锁定的状态
。chrome和firefox都支持这一点

希望有帮助

$(函数(){
$(窗口)。打开(“向下键”,函数(e){
如果(e.which==20)
console.log(e.originalEvent.getModifierState('CapsLock'))
});
$(窗口)。打开(“键控”,函数(e){
如果(e.which==20)
console.log(e.originalEvent.getModifierState('CapsLock'))
});
});


关注这里并按下“大写锁定键”
我一直在寻找一个非常类似问题的答案。普拉内斯的回答为我指明了方向

在我的例子中,我想提醒用户,当他们登录时,capslock已打开。最终我决定采用以下解决方案

角分量:

export class AuthenticateComponent {
  public capslockOn: boolean;

  constructor() {
    this.capslockOn = false;
  }

  public keyup(event: KeyboardEvent): void {
    if (event.key === 'CapsLock') {
      // Checks / sets when the Caps Lock key is specifically pressed.
      this.capslockOn = (!this.capslockOn && event.getModifierState('CapsLock'));
    } else {
      // Checks all other conditions like the Caps Lock was on before the user
      // loaded the form and began typing in it.
      this.capslockOn = event.getModifierState('CapsLock');
    }
  }
}
然后我从我的表单中调用
keyup
函数:

<form ... (keyup)="keyup($event)">

任何形式的按键-用户名或密码-都将检查/设置布尔值
capslockOn
,如果显示图标或消息或两者,我可以*ngIf


谢谢你的解释,普拉内斯。这帮了不少忙。

出于兴趣,您使用caps lock的目的是什么?作为一个用户,我几乎认为caps lock“不是一把钥匙”,我对它触发任何事件都有点惊讶!哈哈,我正在设计一款灵感来源于dota的小手速游戏。基于舒适度,人们把帽子锁作为钥匙,因为它非常接近W-a-s-D。啊,我想知道这是不是一场游戏。干杯祝你好运@BharathRaja我的回答可能会帮助你:P!是的,这似乎是我们能得到的最接近的解决方案。虽然对于带有计时器的快速按键游戏,处理
keyup
事件而不是
keydown
事件会产生巨大的不同:(