我正在使用键盘快捷键构建一些东西,例如您按Ctrl + m打开菜单。我为此使用jQuery和jwerty插件,这看起来像下面的代码:

jwerty.key('m', function () {
    toggleMenu();
});

轻按“m”键将触发toggleMenu功能。

现在,我想知道如何防止用户在输入字段或文本区域中键入内容时触发此功能。

最佳答案

我从未使用过jwerty,但我建议:

jwerty.key('m', function (e) {
    if (e.target.tagName.toLowerCase() !== 'input') {
        toggleMenu();
    }
});

这将测试事件的目标,如果不是input,则调用toggleMenu()函数。如果它是input,则不执行任何操作(尽管您可以根据需要显式使用return false)。

为了解决textarea的问题,正如我确实应该做的那样,可以扩展上述内容(在if评估中添加另一个子句,或者可以采用以下基于switch的方法:
jwerty.key('m', function (e) {
    switch (e.target.tagName.toLowerCase()) {
        case 'input':
        case 'textarea':
            break;
        default:
            toggleMenu();
            break;
    }
});

如果目标元素是inputtextarea,则按m不会执行任何操作,而如果这两个元素都不是,则输入默认状态并调用toggleMenu()

09-20 18:48