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

时间:2017-09-01 07:42:59

标签: 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 == 83){  // S key
                    element.focus();
                };
                if (e.keyCode == 27){  // ESC key
                    element.blur();
                };
            });
        }
    }
});

然后,搜索框元素会使用它来使用SESC键进行对焦:

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

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

1 个答案:

答案 0 :(得分: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();
    };
});