Javascript 在输入内部键入时忽略按键

Javascript 在输入内部键入时忽略按键,javascript,angularjs,focus,keyboard-shortcuts,keyboard-events,Javascript,Angularjs,Focus,Keyboard Shortcuts,Keyboard Events,我有以下指令捕捉某些按键: angular.module('app').directive('keyPress', function ($document) { return { restrict: 'A', link: function (scope, element, attrs) { $document.bind('keyup', function (e) { if (e.keyCode ==

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

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();
                };
            });
        }
    }
});
然后,一个搜索框元素使用
S
ESC
键将其聚焦在内外:

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


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

获取
事件。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();
    };
});

太酷了,行得通!虽然,与检查目标类型是否为“input”不同,检查它是否为null更容易,因为有许多类型的输入。