首页 > 解决方案 > 如何在 JQuery 应用程序中捕获 Shift + F8?

问题描述

我试图在我的 JQuery 应用程序中捕获 Shift+F8 并希望它向下传播。我读过很多帖子,但不知何故我根本无法抓住Shift+F8关键。我在这里找到了 1 个有用的库,但它能够找到 ' Shift+F2/F3/...' 但不是Shift+F8特别是 ' '。任何建议请提前感谢。

环境:Windows & IE (11 & 8)

标签: jqueryinternet-explorer-8internet-explorer-11keyboard-eventsie8-compatibility-mode

解决方案


在任何现代浏览器上,您都可以使用像这样keydownkeyup事件处理程序:

document.addEventListener("keydown", function(e) {
    if (e.key === "F8" && e.shiftKey) {
        e.preventDefault();
        // ...Shift+F8 was pressed...
    }
});

或使用 jQuery:

$(document).on("keydown", function(e) {
    if (e.key === "F8" && e.shiftKey) {
        e.preventDefault();
        // ...Shift+F8 was pressed...
    }
});

这是否有效可能是特定于浏览器的,因为不同的浏览器保留不同的组合键。它适用于我的 Linux 副本上的 Chrome 和 Firefox,适用于 Windows 10 上的 Edge,以及 Windows 8 上的 IE11。请注意,您必须在窗口内部单击以确保它具有焦点。

您已标记。如果您确实需要支持真正过时的浏览器,它没有addEventListener,请使用仍然支持 IE8 的 jQuery 版本(或此答案hookEvent中的函数,它适用于 IE8 [甚至 IE6]),然后不要使用,使用和适当的密钥代码。我们现在拥有的原因是“适当的键码”因键盘布局而异。在我的键盘上,is ,所以:e.keye.which || e.keyCodee.keyF8119

// For obsolete browsers without `addEventListener`
hookEvent(document, "keydown", function(e) {
    if ((e.which || e.keyCode) === 119 && e.shiftKey) {
        e.preventDefault();
        // ...Shift+F8 was pressed...
    }
});

或使用支持 IE8 的旧版本 jQuery:

// For obsolete browsers
$(document).on("keydown", function(e) {
//               ^---- if it's a REALLY old version, you might need `bind` instead of `on`
    if ((e.which || e.keyCode) === 119 && e.shiftKey) {
        e.preventDefault();
        // ...Shift+F8 was pressed...
    }
});

推荐阅读