【问题标题】:Ignore key presses when typing inside of inputs在输入内输入时忽略按键
【发布时间】:2017-09-01 07:42:58
【问题描述】:

我有以下指令可以捕获某些按键:

angular.module('app').directive('keyPress', function ($document) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            $document.bind('keyup', function (e) {
                if (e.keyCode == 83){  // S key
                    element.focus();
                };
                if (e.keyCode == 27){  // ESC key
                    element.blur();
                };
            });
        }
    }
});

然后搜索框元素使用它通过SESC 键来聚焦和聚焦:

<input type="text" class="form-control" placeholder="Search" key-press>

不幸的是,当在包含此搜索输入的页面上输入其他输入时,也会检测到按键并聚焦搜索框。有没有办法只在关注不同输入时才捕捉按键?

【问题讨论】:

    标签: javascript angularjs focus keyboard-shortcuts keyboard-events


    【解决方案1】:

    获取event.target 您可以访问焦点元素,因此您可以检查焦点元素是否是输入。

    $document.bind('keyup', function (event) {
        if(event.target.type === 'input') {
            return;
        }
        if (event.keyCode == 83){  // S key
            element.focus();
        };
        if (event.keyCode == 27){  // ESC key
            element.blur();
        };
    });
    

    【讨论】:

    • 酷,行得通!虽然,不是检查目标类型是否为“输入”,而是更容易检查它是否为空,因为输入的类型很多。
    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2021-07-29
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多