为什么ngKeydown有时没有回应?

时间:2016-11-11 17:51:19

标签: angularjs

所有

我想要做的是添加一个关键监听器来控制页面上的菜单切换。

<body ng-controller="main" ng-keydown="toggleSideBar($event)">

在主控制器中:

$scope.sidebarOpen = false;
$scope.toggleSideBar = function(e){
    if(e.keyCode == 18){ // 'ALT' key
        $scope.sidebarOpen = !$scope.sidebarOpen;
    }
}

在模板中:

.sidebar {
    left:100px; 
    transition: left 0.5s;
}
.sidebar.open {
    left:0px; 
    transition: left 0.5s;
}
<div class="sidebar" ng-class="{'open': sidebarOpen}">

当我按 ALT 键时,每隔一次,它就会响应,我不确定会发生什么,有什么帮助?

更新 后来,我发现这有什么问题: 这是一个特定情况(当你点击ALT时),Chrome会使用 ALT 作为快捷方式来切换焦点在其自定义设置按钮上:

enter image description here

这就是为什么每隔一次,我的钥匙就可以回复了。 所以,现在问题变成:如何绕过这个?

由于

1 个答案:

答案 0 :(得分:0)

对我来说很好,你在这里有browser约束吗?你也可以更新fiddle

<div ng-app>
  <h2>Example</h2>
  <div ng-controller="myController">
      <input ng-keydown="keypress($event)">
          <p>key: {{lastKey}}</p>
          <div ng-keydown="keypress($event)">
          </div>
  </div>
</div>

JS代码:

function myController($scope) {
  $scope.lastKey = "---"

  $scope.keypress = function(e) {
    if(e.keyCode === 18){ // 'ALT' key
        //$scope.sidebarOpen = !$scope.sidebarOpen;
        $scope.lastKey = e.keyCode
    }
  };

}

http://jsfiddle.net/7tyf64dp/