Javascript Mac中的Capslock未触发keyDown事件
铬(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会将的“打开”按钮作为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
按键来处理,而当您的“关闭”按钮作为按键来处理。但是,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
事件会产生巨大的不同:(