5

我试图在我的应用程序中捕获某些 keydown 事件,但前提是没有同时按下“控制”键。我不想遇到屏幕阅读器键盘快捷键的问题。Shift,Ctrl并且Alt很容易检查,因为它们在 javascript 事件中,但我还需要检查InsWindows键以及任何 Mac 控制键。

这是我到目前为止所得到的,它按预期工作,但是当Ins或被Windows按住时我的事件仍然被触发。

handleKeydown: function(event) {
  var comboKeyPressed = event.ctrlKey || event.shiftKey || event.altKey;
  if(!comboKeyPressed && event.keyCode === $.ui.keyCode.HOME) {
    event.preventDefault();
    this.$('>ul>li:last').attr('tabindex', -1);
    this.$('>ul>li:first').attr('tabindex', 0).focus();
  } else if (!comboKeyPressed && event.keyCode === $.ui.keyCode.END) {
    event.preventDefault();
    this.$('>ul>li:first').attr('tabindex', -1);
    this.$('>ul>li:last').attr('tabindex', 0).focus();

  }
}

有没有办法轻松检查其他控制键,还是我需要捕获这些事件并在一些全局布尔值中保留它们this.isInsertPressed

4

3 回答 3

3

你可以这样做:

var keysPressed = {};
var keys = { insert: 45 };    
$(window).keydown(function(e) { keysPressed[e.which] = true; });
$(window).keyup(function(e) { keysPressed[e.which] = false; });

然后后来:

if (keysPressed[keys.insert]) {
    // insert key is currently down
}
于 2013-08-01T22:16:33.063 回答
2

使用event.key和现代的 JS!

没有数字代码了。您可以直接检查Insert密钥。

let isInsertDown = false;
document.addEventListener("keydown", function (event) {
    if (event.key === "Insert") {
        isInsertDown = true;
    }
});
document.addEventListener("keyup", function (event) {
    if (event.key === "Insert") {
        isInsertDown = false;
    }
});

Mozilla 文档

支持的浏览器

于 2018-02-19T18:32:52.260 回答
1

使用keycode属性Event object

if(event.keyCode === 45) // Insert Key
于 2013-08-01T22:05:33.077 回答