铬 (52):
当打开大写锁定时 - 仅触发 keydown(keyUp 或 keyPress 中没有事件)
当关闭大写锁定时 - 仅触发 keyup(keyDown 或 keyPress 中没有事件)
火狐 (46):
对于大写锁定打开和关闭,仅触发 keyDown 事件(无 keyUp 或 keyPress)
我在这里阅读了有关键码和事件的信息http://www.quirksmode.org/js/keys.html http://www.quirksmode.org/js/keys.html以及 MDN 中的这里https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode,aaa 和这里http://unixpapa.com/js/key.html http://unixpapa.com/js/key.html
但以上链接都没有讨论这种奇怪的行为。
这是预期的吗?如果是这样,有什么更简单的方法可以处理吗?
是的,这是预期的。
Chrome 处理CAPS ON as keydown
因为它将开/关视为按住,就像我们按住一样shift键,它会打开行为上限,并在我们释放它时关闭。这大写锁定按钮也。当你开启时大写锁定,镀铬处理'打开' as a keypress
当你'关'它将它处理为keyup
。但是,火狐处理一切keydown
与 chrome 的处理方式相比,这对我来说没有意义。
Solution
你应该使用获取修改器状态() https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState得到的状态Caps Lock
。 Chrome 和 Firefox 均支持此功能。
希望能帮助到你!
$(function() {
$(window).on("keydown", function(e){
if (e.which === 20)
console.log(e.originalEvent.getModifierState('CapsLock'))
});
$(window).on("keyup", function(e) {
if (e.which === 20)
console.log(e.originalEvent.getModifierState('CapsLock'))
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Focus here and press 'Caps Lock'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)