keydown和keypress事件无法正常工作

时间:2014-02-20 21:20:42

标签: angularjs

我有一个指令,我试图绑定keypress和keydown事件但由于某种原因他们不会注册。

element.bind("keydown keypress", function (event) {
    console.log("here");
});

任何线索为什么会这样?

如果您查看此plnkr中的文件selectMe.js,则可以看到绑定。

2 个答案:

答案 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);
      }
    }
});

我不知道你看起来有多大帮助。你必须以其他方式跟踪哪个元素具有虚拟'焦点'。