我有一个指令,我试图绑定keypress和keydown事件但由于某种原因他们不会注册。
element.bind("keydown keypress", function (event) {
console.log("here");
});
任何线索为什么会这样?
如果您查看此plnkr中的文件selectMe.js
,则可以看到绑定。
答案 0 :(得分:2)
尝试将tabindex="0"
添加到<table>
。通过此操作,您只需点击一下或按<table>
即可tab
。但是,您可能有兴趣在加载页面后立即开始收听关键事件。然后,您应该将事件绑定到document
:
angular.element(document).bind(...)
答案 1 :(得分:0)
如果绑定到table元素,则不会获得关键事件,因为该表没有焦点。有关哪些元素可以聚焦的信息,请参阅this question。
然而,事件会冒泡,所以你可以添加一个不可见的输入或锚元素,并在它们冒泡时获取键盘事件,或者只是监听你的文档元素以获取任何未处理的事件。您还可以检查键事件上的ctrlKey
标志,而不是自己跟踪控制键:
var doc = angular.element(document);
doc.on('keyup', function(e) {
if (e.ctrlKey) {
if (e.keyCode === cKey) {
$scope.valueToBeCopied = e.target.value;
console.log('copy: valueToBeCopied: ' + $scope.valueToBeCopied);
}
if (e.keyCode === vKey) {
e.target.value = $scope.valueToBeCopied;
console.log('paste: valueToBeCopied: ' + $scope.valueToBeCopied);
}
}
});
我不知道你看起来有多大帮助。你必须以其他方式跟踪哪个元素具有虚拟'焦点'。