Richtige Art und Weise zu beschränken-text-Eingabe von Werten (z.B. nur zahlen)
Ist es möglich, implementieren eine input
erlaubt, geben Sie nur zahlen ohne manuelle Handhabung von event.target.value
?
In Reagieren, es ist möglich, zu definieren value
- Eigenschaft und danach die Eingabe-Wechsel grundsätzlich verpflichtet, den Wert (nicht möglich es zu ändern, ohne value
ändern). Sehen Beispiel. Und es funktioniert Prima ohne irgendwelche Anstrengungen.
In den Winkel-2 es ist möglich, zu definieren [value]
, aber es wird nur setzen Sie den Wert zunächst, und danach input
ist nicht daran gehindert, die änderungen.
Ich war Herumspielen mit ngModel
und [value] /(input)
finden Sie Beispiel.
Aber in der Ausführung gibt es wesentliche problem:
- wenn Sie Typ 10 (Modell Wert ist 10; Eingabe-Wert ist 10) - richtig
- wenn Sie Typ 10d danach (Modell-Wert ist 10 - nicht geändert, alle nicht-Ziffern entfernt wurde; input Wert ist, 10d) - falsch, weil es das Modell Wert ist der gleiche wie vor
- wenn Sie Typ-10d3 - (Modell-Wert liegt bei 103; Eingabe-Wert 103) - richtig
Wie zu tun, dass einfach (auf den ersten Blick) - Komponente, ohne manuelles handling event.target.value
?...
UPDATE ich bin nicht auf der Suche nach native HTML5 input[number]
element hier. Zahlen Eingabe hier ist nur für das Beispiel - es könnten mehr Aufgaben, wenn ich Sie brauche, um beschränken Sie die Eingabe von text.
Darüber hinaus input[number]
1) nicht einschränken, mir von der Eingabe 10ddd
und 2) (weniger wichtig) enthält Pfeile, die brauche ich nicht.
Und das problem hier ist verhindern Benutzer von der Eingabe etwas über die eingeschränkten Werte, statt ermöglichen zur Eingabe nichts und validieren es danach
- Ich hasse es, dass wir immer zu dieser Diskussion. Irgendwann müssen wir einen standard-Eingang, der tut dies aus der box. Es akzeptieren sollte, wie viele Ziffern, nicht zulassen, dass Sie, um Zeichen einzugeben, negativen oder nicht. Ich weiß, es ist ein HTML-5 Zahl-Ding, aber wir haben nicht erreicht das nirvana. Ich müde von schreiben müssen diesen code für jeden Rahmen, etc..
- Dies könnte gelöst werden, mit der die Antwort gegeben: stackoverflow.com/questions/41465542/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Komponente.ts hinzufügen diese Funktion
In Ihrem template verwenden Sie die folgenden
Diese fangen den Eingang vor angular2 Fänge der Veranstaltung.
keypress
event ist jetzt veraltet. Finden Sie diese Frage für möglich Ersatz.Nach der Tat viel Forschung schließlich habe ich eine Funktion erstellen, die erfüllen die Anforderung.
Die Funktion, die ich erstellt einschränken, alle Sonderzeichen und erlauben nur Buchstaben und Nummer.. und das funktioniert gut für beide, entweder du hast kopieren, einfügen und eingeben von beiden.
Hoffe, es funktioniert 🙂
Wie Sie -
1) Fügen Sie über die Methode in der Klasse component des ts-Datei.
2) Rufen Sie die Methode inputValidator($event) auf das Eingabe-event..
Die inputmask-plugin nicht den besten job dieser. Seine extrem flexibel, Sie können liefern, was regex die Sie gerne einschränken Eingang. Es ist auch nicht erforderlich JQuery.
Schritt 1: Installieren Sie das plugin:
Schritt 2: erstellen Sie eine Richtlinie, um wickeln Sie die Eingabe-Maske:
Schritt 3:
Check out Ihre github docs für weitere Informationen.
Getestet, Antwort Von mir:
form.html
form.Komponente.ts:
Können Sie die HTML5-input-Typ number
Es nicht akzeptiert alle Zeichen, die in der Deklaration
Hier ist ein Beispiel für die Verwendung mit Winkel-2
[(model)]
http://www.webpackbin.com/VJNUNF0M-
Einige der Antworten hat bei mir nicht funktioniert, also nahm ich die besten Stücke aus den Antworten (danke Jungs) und erstellt eine Eckige 5 der Richtlinie, der sollte den job (und mehr) für Sie. Es ist vielleicht nicht perfekt, aber es bietet Flexibilität.
HTML
<input class="form-control" appInputMask="badBoys">
Ich denke, das wird Ihr problem lösen. Ich erstellt eine Richtlinie, welche Filter von den Eingaben des Benutzers und schränkt die Zahl oder text, die Sie wollen.
Diese Lösung ist für bis zu Ionic-3 und Eckig-4-Benutzer.
In HTML in
<input>
Feld schreiben:(keypress)="onlyNumberKey($event)"
und in ts-Datei schreiben:
Ich denke, ein custom ControlValueAccessor ist die beste option.
Nicht getestet, aber soweit ich mich erinnere, sollte das funktionieren:input type="number"
. Eingang:Anzahl nicht unterstützenpattern
. Für volle Flexibilität können Sie eine benutzerdefinierteControlValueAccessor
. Es gibt viele Fragen, mit Beispielen von Thierry Templier hier SO überControlValueAccessor
.ControlValueAccessor
hört sich interessant an zu schauen 🙂 Schnell geprüft paar Beispiele zu nennen - sieht aus wie über Komplikation bei solch einfachen Aufgabe...pattern
ist auch nur eine Gültigkeitsregel, die nur Fehler bei der Validierung aber nicht beschränken Eingabe auf bestimmte Zeichen beschränkt. Ich denkeControlValueAccessor
ist der Weg zu gehen, und Sie sind nicht sehr kompliziert. Vielleicht zuerst ein bisschen kompliziert zu verstehen, aber Sie haben nur zwei Methoden (schreiben und Lesen).In html:
In-Komponente:
Anoher eine
wenn Sie vom getriebenen Vorlage
Update Wie @BikashBishwokarma Kommentar, dieser nicht funktioniert, wenn Sie einfügen ein Zeichen in der Mitte. Wir können ändern Sie die Funktion von einigen wie
Sehen, wie mainten die cursor-position
Unten arbeitet die Lösung mit NgModel
Variable hinzufügen
In html hinzufügen
In der Ts-Datei
Alle zu fangen die Veranstaltung umliegenden Modell ändert,
kann erwägen,
Erkennt es copy /paste, keyup, jede Bedingung, die ändert den Wert des Modells.
Dann: