2016-11-21 58 views
1

在我的代码中,我试图覆盖按键(例如,我试图在显示数字键盘时覆盖所有非数字键)。我试着做以下,它只与退格的工作,进入和标签按钮:覆盖键按角度

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(); 
    } 
}; 

这些都不为我工作的标点字符(例如,().等)。退格键和回车键现在不能工作,但所有其他字符仍然显示。我也试着使用ng-keypressng-keyup,但我真的不希望他们的工作...

编辑: 我应该提到,但我做我的测试在平板电脑上(的Nexus 9 ,iPad)

+0

有点更容易阅读: '''变种键= event.keyCode 如果(键< 48 ||(键> 57 &&键<96)||键> 105){//如果不是0-9为正常,数字键盘''' 你确定它是在它内部阻止? – bryce

+0

这确实使它更容易阅读!是的,我可以阻止代码,如果阻止(虽然行为在使用断点时很奇怪 - 我认为事件的时间会变得混乱) – Kevin

回答

0

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

另外置备,以允许HomeEndLeft & 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>

+0

这可以在我的笔记本电脑上运行。 但是,这仍然无法在平板电脑上使用(我正在使用Nexus 9)。它会阻止所有字母,但不会阻止任何标点符号。然后,在标点符号之后,我可以输入我想要的任何字母 – Kevin