2016-07-07 10 views
6

Mam prosty numer wejścia tak:Prevent literę „e” i kropki przed wpisany numer wejściowego

<input type="number"/> 

Gdy próbuje niczego wejściowego innego niż numer lub literę „E”, to nie działa, ale kiedy wpisuję literę "e" to działa.

Sprawdziłem specyfikację w3.org i wyraźnie stwierdza, że ​​liczby zmiennoprzecinkowe można wpisywać za pomocą normalnej notacji (np. 10.2) lub notacji naukowej (np. 1e2).

Moje pytanie brzmi: czy istnieje sposób, aby uniemożliwić użytkownikowi pisanie liter i kropek. Mówi się w inny sposób: czy istnieje sposób, aby numer wejściowy zaakceptować TYLKO LICZNE INTEGRATORY?

Mam pomysł zrobienia tego za pomocą dyrektywy Angular, którą wprowadzę jako atrybut do mojego numeru wejściowego, ale naprawdę nie wiem, jak wykonać tę pracę.

EDIT: Co chciałbym zrobić, to symulować ten sam zachowanie, że mamy teraz, gdy próbuje wpisać dowolną inną literą alfabetu innego niż „e” lub „”. Chcę tylko powiedzieć, że nie chcę widzieć litery pojawiającej się na wejściu (tak jak teraz jest).

+2

Możliwa duplikatu. Proszę odnieść się do: http://stackoverflow.com/questions/19966417/prevent-typing-non-numeric-in-input-type-number?rq=1 – Mfusiki

+0

Wszystkie znalezione tam hacki nie symulują tego samego zachowania mamy obecnie z numerem wejściowym, gdy wpisujemy inną literę niż "e". – Mathemagician

+0

Czy znalazłeś to, czego szukałeś w odpowiedzi? Jeśli tak, zaznacz tę, której potrzebujesz jako odpowiedź: – Weedoze

Odpowiedz

6

Masz rację, że należy to zrobić z dyrektywą. Wystarczy utworzyć dyrektywę i dołączyć ją do input. Ta dyrektywa powinna wykrywać zdarzenia keypress i/lub keydown. Możliwe również wklejanie wydarzeń. Jeśli wprowadzony znak char jest "e" lub dot-call event.preventDefault();

angular.module('app', []) 
 
    .directive('yrInteger', yrInteger); 
 

 
function yrInteger() { 
 
    return { 
 
    restrict: 'A', 
 
    link: function(scope, element, attrs) { 
 
    
 
     element.on('keypress', function(event) { 
 

 
     if (!isIntegerChar()) 
 
      event.preventDefault(); 
 
     
 
     function isIntegerChar() { 
 
      return /[0-9]|-/.test(
 
      String.fromCharCode(event.which)) 
 
     } 
 

 
     })  
 
    
 
    } 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app"> 
 
    <input 
 
     type="number" 
 
     yr-integer 
 
     /> 
 
</div>

+1

Jeśli ją skopiuję i wkleję, nadal będzie możliwe e –

+1

Czy możesz podać plunkr lub inny powtarzalny przykład? – Martin

+1

U tylko skopiuj tekst, który ma e w nim i wklej, że –

0

można po prostu użyć ng-pattern na wejściu

Controller

$scope.onlyDigits= /^\d+$/; 

HTML

<input ng-pattern="onlyDigits" type="number" /> 

Takie wykorzystanie wzoru \d co jest dla każdej wartości liczbowej

+0

Ten wzorzec pozwala na liczby całkowite, a nie liczby całkowite. Liczba całkowita liczb całkowitych i ich odpowiedniki ujemne. – Martin

+0

http: //www.w3schools.com/jsref/jsref_regexp_digit.asp -> Metaznak \ d służy do znalezienia cyfry od 0-9. – Weedoze

+0

Tak. '\ d' jest takie samo jak' [0-9] '. Żadne z nich nie pasuje do wszystkich liczb całkowitych. -1 jest poprawną liczbą całkowitą, '/^\ d + $ /. Test ('- 1')' zwraca 'fałsz'. – Martin

Powiązane problemy