javascript - 在 Chrome 浏览器中管理 JavaScript 热键

标签 javascript jquery google-chrome cross-browser

我在我构建的网站上有以下 jQuery 代码:

$(document).ready(function() {
  // Other Bindings/Initializations Removed

  // Hotkey Event Handler to 'doSomething'
  //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  $(document).keypress("a",function(e) {
    if(e.altKey) { // Doesn't work
      doSomething();
    }
  });

  // Hotkey Event Handler to 'doSomething'
  //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  $(document).keypress("a",function(e) {
    if(e.shiftKey) { //Works as Expected?
      doSomething();
    }
  });

});

代码捕获按键组合事件(在本例中为“Alt-A”),然后继续调用执行适当操作的函数。我在 FireFox 中测试了此功能,并且该函数按预期被调用。当我在 Chrome 中测试该功能时,该功能没有被调用,而是发出了令人讨厌的错误提示音。我认为也许“Alt-A”与一个重要的浏览器热键组合发生冲突,因此将“A”更改为“N”,“G”,然后“K”;每次未调用该函数并发出错误提示音时。然而,当我创建 Shift-A/N/G/K 热键组合时,Chrome 按预期调用了该函数。

  1. 为什么 Chrome 对“Alt”键的处理方式不同?

  2. 如何为我的网站定义热键,以便它可以在 Chrome 中使用“Alt”键运行?

最佳答案

这适用于 Chrome 和 Firefox,但在 IE 中 Alt+a 打开收藏夹菜单。我不确定您将如何覆盖它。

Fiddle

HTML:

<a accesskey="a">​

Javascript:

$(document).ready(function() {
    // Other Bindings/Initializations Removed
    // Hotkey Event Handler to 'doSomething'
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    $(document).keypress("a", function(e) {

        if (e.shiftKey) { //Works as Expected?
            alert("shift a");
        }

        if (e.altKey) {
            alt_a_function();
        }

    });

    $(document).on("click", "[accesskey=a]", function() {
        alt_a_function();
    });

});

function alt_a_function() {
    alert("alt a");
}​

关于javascript - 在 Chrome 浏览器中管理 JavaScript 热键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13655493/

相关文章:

javascript - 将一维数组转换为二维数组

javascript - 如何将类 smoothscroll 添加到 jquery 中定义的链接

javascript - 正则表达式 - 至少 1 个数字、1 个字母、1 个特殊字符和至少 3 个字符

html - Firefox 和 Chrome 上的 CSS/XHTML 显示问题

javascript - HTML5 Canvas A* 星型路径查找

javascript - VueJs - 将数组中的对象检索到新的对象数组中

jquery - 如何使用 jQuery 在每个表格单元格中设置增量 CSS 类?

javascript - 我如何在 jQuery 的另一个元素中选择与其他元素相同的第三个元素?

javascript - 检测 javascript 中的变量何时更改

javascript - HTML5 表单显示 [object HTMLInputElement][object HTMLInputElement] 而不是两个数字相加的实际结果