javascript - Mac 中的 Capslock 不会触发 keyDown 事件

标签 javascript events dom-events keyboard-events capslock

Chrome (52):

打开大写锁定时 - 仅触发 keydown(keyUp 或 keyPress 中没有事件)

关闭大写锁定时 - 仅触发 keyup(keyDown 或 keyPress 中没有事件)

火狐 (46):

对于打开和关闭大写锁定(没有 keyUp 或 keyPress),只有 keyDown 事件被触发

我在这里阅读了有关键码和事件的信息 http://www.quirksmode.org/js/keys.html在 MDN 中 https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode , aaaand here http://unixpapa.com/js/key.html

但是上面的链接都没有谈到这种奇怪的行为。 这是预期的吗?如果是这样,有没有更简单的方法来处理它?<​​/p>

最佳答案

是的,这是预期的。

Chrome 将 CAPS ON 视为 keydown 因为它将开/关视为按住,就像我们按住 shift 键一样,打开行为上限并在我们释放它时关闭。此 Caps Lock 按钮也是。当您打开Caps Lock 时,chrome 会将'打开' 视为按键,而当您'关闭' 它将其作为 keyup 处理。但是,firefox 将所有内容都作为 keydown 处理,与 chrome 的处理方式相比,这对我来说没有意义。

解决方案

你应该使用 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'

关于javascript - Mac 中的 Capslock 不会触发 keyDown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39016292/

相关文章:

events - 除了 UI 之外,您还以何种方式使用委托(delegate)和/或事件?

javascript - 在浏览器请求其他资源(例如图像)之前是否会触发任何事件?

javascript - "Error: <path> attribute d: Expected number"

javascript - 为什么在浏览器中使用 ES6

javascript - 使用 jQuery 和 mysqli_num_rows() 获取错误的数组长度

c# - 删除动态添加的事件处理程序

javascript - 如何才能使 map 的大小精确地适合容器?

JQuery:元素处于 View 中时触发操作

javascript - 谷歌浏览器不接受 .contentDocument 或 .contentWindow

javascript - 在窗口上添加 Vue.js 事件