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");
};
});