在我的代码中,我试图覆盖按键(例如,当我显示数字键盘时,我试图覆盖所有非数字键)。我尝试了以下操作,它只适用于退格键,输入键和制表符按钮:
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-keypress
和ng-keyup
,但我并不真的希望它们有效......
修改: 我应该提到,但我正在平板电脑上进行测试(Nexus 9,iPad)
答案 0 :(得分:0)
您必须处理所有必需的密钥,如下所示。即使我使用shift
键处理数字按键,也会插入$
这样的符号。
还配置为允许Home
,End
,Left
&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>