【问题标题】:Combination Keydown function not working for Mac Keyboard组合 Keydown 功能不适用于 Mac 键盘
【发布时间】:2019-10-22 17:04:06
【问题描述】:

我正在尝试使用键盘快捷键在我的应用程序中显示搜索栏。

虽然键盘快捷键使用 Windows 键盘可以完美运行,但当我使用带有 Mac 键盘的 Mac 机器时,代码会失败。

以下是我写的函数 -

var osName = "Unknown OS";
if (navigator.appVersion.indexOf("Win") != -1) osName = "Windows";
if (navigator.appVersion.indexOf("Mac") != -1) osName = "MacOS";

function showSearchBarOnKeyPress() {
        $(document).keydown(function (e) {
            if ((e.ctrlKey && e.altKey && e.key === "z") || (osName === "MacOS" && e.keyCode === 90 && e.keyCode === 17 && e.keyCode === 91)) {
                searchBarIsShown();
            }
        });
    }

最初我没有'||' 'If' 语句中的条件。第一个条件在使用 Windows 键盘时有效。当我在 Mac 上检查时,它不起作用。所以我不得不输入'||'健康)状况。

对于 MacOS 条件,我最初使用了键码 - 59,55 和 6,如本参考所示 - https://eastmanreference.com/complete-list-of-applescript-key-codes

在检查 Mac 机器时,检测到的键码是 - 90,91 和 17,然后我替换了它们。

但它仍然不起作用。

有人可以就这个问题提供他们的见解/想法吗?

谢谢

【问题讨论】:

  • 先不使用if语句试试($(document).keydown(function (e) {...之后)
  • 请提供一个最小、完整且可验证的示例 (MCVE)。
  • 只是想检查一下...你确定你得到了正确的keyCodes吗?一方面你有 ctrl+alt+z 另一个(MacOS)建议 z+control+command 键。 Mac 上的注意事项通常在 Mac 上将ctrl 键与command 键切换。
  • 在mac中有event.metaKey。看到这个question

标签: javascript jquery macos keyboard-shortcuts


【解决方案1】:

e.ctrlKeye.altKeyKeyboardEvent 对象的特殊属性,包含这些按钮的状态。

e.keyCode === 90 && e.keyCode === 17 && e.keyCode === 91

属性e.keyCode 不能同时是三个不同的值。


我对苹果几乎没有经验,但我认为您必须手动跟踪这些按钮的状态。

一个简单的状态管理器是:

const keyDown = Object.create(null);
$(document).on("keydown keyup", e => keyDown[e.keyCode] = e.type === "keydown");

所以现在您可以一次检查所有三个按钮:

keyDown[90] && keyDown[17] && keyDown[91]

【讨论】:

  • 你不需要状态管理器;只要你的逻辑表达式中的逻辑正确就足够了:)
【解决方案2】:

试试这个: metaKey 是 mac 上的 cmd 键。 altKey 是 mac 上的选项键。

var osName = "Unknown OS";
if (navigator.appVersion.indexOf("Win") != -1) osName = "Windows";
if (navigator.appVersion.indexOf("Mac") != -1) osName = "MacOS";

function showSearchBarOnKeyPress() {
    $(document).keydown(function (e) {
    var modifier = (navigator.appVersion.indexOf("Mac") != -1) ? e.ctrlKey : e.metaKey;
        if (modifier && e.altKey && e.key === "z") {
            searchBarIsShown();
        }
    });
}

请注意,旧浏览器支持 metaKey..

【讨论】:

  • 那个me​​taKey代表windows上的windows-key。
  • Noam 和@Thomas:感谢您的意见。 event.metaKey 成功了。不过,我仍然不清楚一件事 - 不同键盘的组合键是否不同?对于 Windows,我使用了 Ctrl+Alt+z,而对于 Mac,情况并非如此——我必须使用 Meta(Command)+Shift+z。即使对于 Windows,如果我尝试使用 - Ctrl+Shift+z 它也不起作用。有没有可以通过代码操作的特定组合键?
猜你喜欢
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
相关资源
最近更新 更多