2016-11-21 53 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