2016-11-21 6 views
1

In meinem Code versuche ich einen Tastendruck zu überschreiben (zum Beispiel versuche ich, alle nicht numerischen Tasten zu überschreiben, wenn eine numerische Tastatur angezeigt wird). Ich habe versucht, die folgenden zu tun, und es nur mit dem Backspace gearbeitet, eingeben und Tab-Tasten:Override-Taste mit Winkel drücken

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

Keine von diesen für mich gearbeitet für die Interpunktionszeichen (i/e ( oder ) oder . usw.). Die Rücktaste und die Eingabetaste funktionieren jetzt nicht, aber alle anderen Zeichen werden weiterhin angezeigt. Ich habe auch versucht ng-keypress und ng-keyup verwenden, obwohl ich nicht wirklich erwarten, zu arbeiten, um sie zu ...

EDIT: ich erwähnt habe sollte, aber ich mache meine Tests auf einer Tablette (Nexus 9 , iPad)

+0

ein bisschen leichter zu ermöglichen provisioniert zu lesen: '' 'var key = event.keyCode if (Taste < 48 || (Taste> 57 && Taste <96) || Taste> 105) {// Wenn nicht 0-9 für normales, numerisches Tastenfeld''' sind Sie sicher, dass es sich darin befindet Block? – bryce

+0

Das macht es leichter zu lesen! Und ja, ich kann den Code darin stoppen, wenn Block (obwohl das Verhalten bei der Verwendung von Breakpoints merkwürdig wirkt - ich denke, das Timing der Ereignisse wird durcheinander gebracht) – Kevin

Antwort

0

Sie müssen alle erforderlichen Schlüssel wie unten behandeln. Auch ich habe die Zifferntaste gedrückt mit shift Schlüssel, der ein Symbol wie $ einfügen wird.

Auch Home, End, Left & Right Pfeiltasten

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

Dies funktionierte auf meinem Laptop. Dies funktioniert jedoch immer noch nicht auf einem Tablet (ich verwende ein Nexus 9). Es blockiert alle Buchstaben, blockiert jedoch keine Interpunktionszeichen. Dann kann ich nach einem Interpunktionszeichen beliebige Buchstaben eingeben – Kevin