AngularJS - 同时按下多个按键

标签 angularjs keypress

我有以下 $broadcast 来捕获 Angular 中的按键:

$document.bind('keypress', function(event) {
    var key = event.which;
    $rootScope.$broadcast('keypress', event);
    $rootScope.$broadcast('keypress:' + key, event);
});

我用$on来听

但是,我想检测何时同时按下两个键,例如同时按下 enters (不是一一组合的组合)由另一个)。

执行此操作的最佳方法是什么?

编辑

我的想法是:

var keys = [];
$document.bind('keydown', function(event) {
    keys[event.which] = true;
});
$document.bind('keyup', function(event) {
    delete keys[event.which];
});

$document.bind('keypress', function(event) {
    var key = event.which;
    var keysPressed = [];
    angular.forEach(keys, function(value, key) {
        keysPressed += 'keypress:' + key;
    });
    $rootScope.$broadcast('keypress', event);
    $rootScope.$broadcast(keysPressed, event);
});

因此,如果我有多个按键,那么我会创建正确的 $broadcast。然而,问题在于现在的顺序很重要(即,如果我按 a 然后按 enter,那么 $broadcast 就是 keypress:58keypress:13 如果我按其他方式,我会得到 keypress:13keypress:58)

最佳答案

在我看来,广播使用得太多了。相反,也许使用自定义指令?这是用户按下 Shift+Tab 的示例,它会触发如下事件:

<input on-shift-tab="prevStep($event,'email')" />
app.directive('onShiftTab', function() {
return function(scope, element, attrs) {
    var map = {9: false, 16: false};

    element.on("keydown", function(event) {
        if (event.which in map) {
            map[event.which] = true;
            if (map[9] && map[16]) {
                scope.$apply(function(){
                    scope.$eval(attrs.onShiftTab, {'$event': event});
                });
                event.preventDefault();
            }
        }
    });
    element.on("keyup", function(event) {
        if (event.which in map) {
            map[event.keyCode] = false;
        }
    });
};
})

关于AngularJS - 同时按下多个按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160124/

相关文章:

php - 使用 angular.js 和 PHP 从数据库中检索数据

angularjs - 编辑时关闭 angularJS 中的重新排序

javascript - AngularJS:未捕获错误:[$rootScope:infdig] 达到 10 次 $digest() 迭代

javascript - 输入清理 Laravel 4

javascript - 捕获不同的按键

JQuery Keydown、Keypress、Keycode 等

OpenGL/Gtkmm 游戏 - 键盘移动

javascript - 使用 firebase 进行动态查询

Python PyQt5 - QEvent Keypress 执行两次

Jquery keypress、keydown、keyup、input 不符合我的要求