用角度覆盖按键

时间:2016-11-21 22:57:06

标签: javascript angularjs

在我的代码中,我试图覆盖按键(例如,当我显示数字键盘时,我试图覆盖所有非数字键)。我尝试了以下操作,它只适用于退格键,输入键和制表符按钮:

HTML:

<input ng-keydown="numberKeydown($event)">

JS:

$scope.numberKeydown = function(event) {
    if(!(event.keyCode >= 48 && event.keyCode <= 57) && !(event.keyCode >= 96 && event.keyCode <= 105)) { // if not 0-9 for normal, numeric keypad
        event.stopPropagation();
        event.preventDefault();
    }
};

对于标点字符(i / e ().等),这些都不适用于我。退格和输入按钮现在已成功完成,但所有其他字符仍然显示。我也尝试过使用ng-keypressng-keyup,但我并不真的希望它们有效......

修改: 我应该提到,但我正在平板电脑上进行测试(Nexus 9,iPad)

1 个答案:

答案 0 :(得分:0)

您必须处理所有必需的密钥,如下所示。即使我使用shift键处理数字按键,也会插入$这样的符号。

还配置为允许HomeEndLeft&amp; Right箭头键

var app = angular.module('app', []);
app.controller('TestController', function($scope) {
  $scope.numberKeydown = function(event) {
    // Allow: backspace, delete, tab, escape, enter
    if ([8, 9, 27, 13, 110, 46, 127].indexOf(event.keyCode) !== -1 || 
        // Allow: Ctrl+A, Ctrl+C, Ctrl+V
        (event.ctrlKey === true && (event.keyCode === 65 || event.keyCode === 67 || event.keyCode === 86)) ||
       // Allow: home, end, left, right
       (event.keyCode >= 35 && event.keyCode <= 39)) { 
          return;
      }
    
      // Ensure that it is a number and stop the keypress
      if ((event.shiftKey || (event.keyCode < 48 || event.keyCode > 57)) && (event.keyCode < 96 || event.keyCode > 105)) {
         event.stopPropagation();
         event.preventDefault();
      }
  };
});

angular.bootstrap(document, ['app']);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-controller="TestController">
   <input ng-keydown="numberKeydown($event)">
</div>