Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular.js侦听按键作为按钮的快捷方式_Javascript_Jquery_Angularjs_Angularjs Directive_Keypress - Fatal编程技术网

Javascript angular.js侦听按键作为按钮的快捷方式

Javascript angular.js侦听按键作为按钮的快捷方式,javascript,jquery,angularjs,angularjs-directive,keypress,Javascript,Jquery,Angularjs,Angularjs Directive,Keypress,我的第一个角度应用程序是一个非常基本的测量工具。我有多项选择题,每个答案都有一个按钮,还有一个基本功能,可以在点击按钮时记录每个答案,如下所示: ng-click="logAnswer(answer.id)" 我想要的是能够在文档中添加一个keypress事件,该事件将侦听与按钮选择匹配的键盘响应1、2、3、4、5,并调用相同的函数 在四处搜索时,我只能在某个特定输入字段有焦点时找到与按键相关的响应,这对我没有帮助。我确实在这篇文章中找到了OPs的回应,这似乎是朝着正确的方向发展的,但我就是不

我的第一个角度应用程序是一个非常基本的测量工具。我有多项选择题,每个答案都有一个按钮,还有一个基本功能,可以在点击按钮时记录每个答案,如下所示:

ng-click="logAnswer(answer.id)"
我想要的是能够在文档中添加一个keypress事件,该事件将侦听与按钮选择匹配的键盘响应1、2、3、4、5,并调用相同的函数

在四处搜索时,我只能在某个特定输入字段有焦点时找到与按键相关的响应,这对我没有帮助。我确实在这篇文章中找到了OPs的回应,这似乎是朝着正确的方向发展的,但我就是不知道我是如何得到他的指令来调用我的功能的

我已将指令包含在我的js中:

angular.module('keypress', []).directive('keypressEvents', 
  function($document, $rootScope) {
    return {
      restrict: 'A',
      link: function() {
        $document.bind('keypress', function(e) {
           $rootScope.$broadcast('keypress',e , String.fromCharCode(e.which));
        });
     }
   }
})
但我不确定如何在控制器中使用keybinding对象:

function keyedS(key, parent_evt, evt){
      // key is the key that was pressed
      // parent_evt is the keypress event
      // evt is the focused element object
}
$scope.keyBindings = {
    's': keyedS
}
$rootScope.$on('keypress', function (e, a, key) {
    $scope.$apply(function () {
        $scope.key = key;
    });
})
如何使keybinding对象侦听我正在侦听的键并启动我需要的函数


感谢您在控制器中捕获rootscope发出的事件:

function keyedS(key, parent_evt, evt){
      // key is the key that was pressed
      // parent_evt is the keypress event
      // evt is the focused element object
}
$scope.keyBindings = {
    's': keyedS
}
$rootScope.$on('keypress', function (e, a, key) {
    $scope.$apply(function () {
        $scope.key = key;
    });
})
将由您在控制器中使用


这里有一个

看看ngKeyup指令


基于按键使用一系列函数来实现所需的各种功能如果您坚持使用AngularJS来检测按键事件,
ngKeypress
就是您想要使用的

<!-- you can, for example, specify an expression to evaluate -->
<input ng-keypress="count = count + 1" ng-init="count=0">

<!-- or call a controller/directive method and pass $event as parameter.
     With access to $event you can now do stuff like 
     finding which key was pressed -->
<input ng-keypress="changed($event)">


有关更多信息,请查阅文档。您可能还想查看和指令。

有人已经创建了特定的键盘快捷键AngularJS模块,请查看:

是否只有在按下特定键(如空格键)时才能调用函数?我已经调查过了

JS


有关
$event
对象的更多信息,请参见

这一项对我有效,感谢@Jorg-必须将“按键事件”添加到div中,例如
是一个奇怪的步骤,我很幸运地在你的小提琴中看到了这一点,并使其全部正常工作。多亏了像这样的怪事,我仍然在寻找一只奇怪而神秘的野兽,但希望我能做到。谢谢这是很有帮助的,我采纳了你的建议,但遗憾的是,我的声誉不够好,不能投票给正确的答案(这对我来说似乎很可笑,但嘿,规则是正确的?)。我可以向你表示感谢!编辑:但我是个白痴,才意识到我可以接受你的答案。derr.Thank@rageandqq我确实查阅了angular文档,但发现它们毫无帮助,因为它们确实缺乏任何好的示例。当你说“坚持使用angularJS检测…”时,你是什么意思?这不是最好的解决办法吗?或者你建议我应该使用JS或JQuery来检测按键吗?是的,我的建议是使用JQuery来检测按键事件。我确实尝试过这个方法,但我不知道如何让它工作。我是angular的新手,发现大多数地方的文档都非常浅显,而且从来没有提供一个我可以学习的完整示例-太多假设知识!你知道如何实现一个模块吗?你在哪里停下来的?你成功地注入依赖性了吗?因为一旦你得到它,它就相当简单了。我想说的是你已经有了一个“插件”。Github页面有很好的文档记录,如果你循序渐进,你应该不会有问题。:)我不确定我能做什么,也不能做什么。我真的很挣扎,无法用angular.log记录事情,所以我真的不知道我有多少时间!我遵循了angular热键模块的github说明,但它一直在angular.js中抛出错误。我在下面将@Jorg的答案标记为正确,因为它用我拥有的代码提供了我需要的结果。我意识到这可能不是最好的,但这正是我现在需要的!我订购了一些书,但遗憾的是,截止日期先到了。书与现场试错过程相比并不多。它迫使您注意控制台错误。“我遵循了angular热键模块的github说明,但它一直在angular.js中抛出错误”。错误是什么?
 $scope.fn = function (event) {
     $scope.keyCode = event.keyCode;
     if (event.keyCode == 32) {
         console.log("spacebar pressed");
     };
 });