Gibt es eine schnelle Möglichkeit, eine HTML-Texteingabe ( <input type=text />
) so einzustellen , dass nur numerische Tastenanschläge (plus '.') Erlaubt werden?
javascript
jquery
html
Julius A.
quelle
quelle
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
Antworten:
Hinweis: Dies ist eine aktualisierte Antwort. Die folgenden Kommentare beziehen sich auf eine alte Version, die mit Schlüsselcodes herumgespielt hat.
JavaScript
Probieren Sie es selbst auf JSFiddle .
Sie können die Eingabewerte eines Textes
<input>
mit der folgendensetInputFilter
Funktion filtern (unterstützt Kopieren + Einfügen, Ziehen + Ablegen, Tastaturkürzel, Kontextmenüoperationen, nicht typisierbare Tasten, die Caret-Position, verschiedene Tastaturlayouts und alle Browser seit IE 9 ). ::Mit der
setInputFilter
Funktion können Sie jetzt einen Eingabefilter installieren:Weitere Beispiele für Eingabefilter finden Sie in der JSFiddle-Demo . Beachten Sie auch, dass Sie noch eine serverseitige Validierung durchführen müssen!
Typoskript
Hier ist eine TypeScript-Version davon.
jQuery
Es gibt auch eine jQuery-Version davon. Siehe diese Antwort .
HTML 5
HTML 5 bietet eine native Lösung mit
<input type="number">
(siehe Spezifikation ). Beachten Sie jedoch, dass die Browserunterstützung unterschiedlich ist:step
,min
undmax
Attribute.e
undE
das Feld eingeben . Siehe auch diese Frage .Probieren Sie es selbst auf w3schools.com .
quelle
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
Verwenden Sie dieses DOM
Und dieses Skript
quelle
Ich habe lange und intensiv nach einer guten Antwort darauf gesucht, und wir brauchen dringend
<input type="number"
, aber kurz gesagt, diese beiden sind die prägnantesten Möglichkeiten, die ich finden könnte:Wenn Sie das nicht akzeptierte Zeichen, das vor dem Löschen für den Bruchteil einer Sekunde angezeigt wird, nicht mögen, ist die folgende Methode meine Lösung. Beachten Sie die zahlreichen zusätzlichen Bedingungen, um zu vermeiden, dass alle Arten von Navigation und Hotkeys deaktiviert werden. Wenn jemand weiß, wie man das verdichtet, lass es uns wissen!
quelle
/[^\d+]/
und es funktioniert mit Niederhalten/[^\d]+/
stattdessen sein sollte. Gute Lösung. Also @ user235859.
. Sie sollten es tatsächlich schaffen/[^0-9.]/g
Hier ist eine einfache, die genau eine Dezimalstelle zulässt, aber nicht mehr:
quelle
Und noch ein Beispiel, das für mich großartig funktioniert:
Auch an Tastendruckereignis anhängen
Und HTML:
Hier ist ein jsFiddle-Beispiel
quelle
HTML5 hat
<input type=number>
, was für Sie richtig klingt. Derzeit wird es nur von Opera nativ unterstützt, es gibt jedoch ein Projekt mit einer JavaScript-Implementierung.quelle
type=number
ist, dass IE9type=number
darin, dase
Zeichen zuzulassen, da ese+10
als Zahl betrachtet wird. Das zweite Problem ist, dass Sie die maximale Anzahl von Zeichen in der Eingabe nicht begrenzen können.Die meisten Antworten hier haben alle die Schwäche, Schlüsselereignisse zu verwenden .
Viele der Antworten würden Ihre Fähigkeit zur Textauswahl mit Tastaturmakros, Kopieren + Einfügen und unerwünschtem Verhalten einschränken, andere scheinen von bestimmten jQuery-Plugins abhängig zu sein, die Fliegen mit Maschinengewehren töten.
Diese einfache Lösung scheint für mich plattformübergreifend am besten zu funktionieren, unabhängig vom Eingabemechanismus (Tastenanschlag, Kopieren + Einfügen, Rechtsklick Kopieren + Einfügen, Sprache-zu-Text usw.). Alle Textauswahl-Tastaturmakros würden weiterhin funktionieren und sogar die Möglichkeit einschränken, einen nicht numerischen Wert per Skript festzulegen.
quelle
replace(/[^\d]+/g,'')
Ersetzen Sie alle nicht- stelligen Zeichen durch eine leere Zeichenfolge. Der Modifikator "i" (ohne Berücksichtigung der Groß- und Kleinschreibung) wird nicht benötigt./[^\d,.]+/
Ich habe mich für eine Kombination der beiden hier genannten Antworten entschieden, d. H.
<input type="number" />
und
<input type="text" onkeypress="return isNumberKey(event);">
quelle
return !(charCode > 31 && (charCode < 48 || charCode > 57));
HTML5 unterstützt reguläre Ausdrücke, sodass Sie Folgendes verwenden können:
Warnung: Einige Browser unterstützen dies noch nicht.
quelle
<input type=number>
.+
Musterattribut?JavaScript
zusätzlich können Sie Komma, Punkt und Minus (, .-) hinzufügen
HTML
quelle
So einfach....
// In einer JavaScript-Funktion (kann HTML oder PHP verwenden).
In Ihrer Formulareingabe:
Mit Eingang max. (Diese oben erlaubt eine 12-stellige Nummer)
quelle
var charCode = (evt.which) ? evt.which : evt.keyCode;
2 Lösungen:
Verwenden Sie einen Formularvalidator (zum Beispiel mit dem jQuery-Validierungs-Plugin ).
Führen Sie eine Überprüfung während des Ereignisses onblur (dh wenn der Benutzer das Feld verlässt) des Eingabefelds mit dem regulären Ausdruck durch:
quelle
var regExpr = /^\d+(\.\d*)?$/;
.123
(statt0.123
) eingeben möchte ?var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;
.Ein sicherer Ansatz besteht darin, den Wert der Eingabe zu überprüfen, anstatt Tastendrücke zu entführen und zu versuchen, keyCodes zu filtern.
Auf diese Weise kann der Benutzer Tastaturpfeile, Modifizierertasten, Rücktaste, Löschen, nicht standardmäßige Tastaturen verwenden, mit der Maus einfügen, Text per Drag & Drop verwenden und sogar Eingabehilfen verwenden.
Das folgende Skript erlaubt positive und negative Zahlen
EDIT: Ich habe meine alte Antwort entfernt, weil ich denke, dass sie jetzt veraltet ist.
quelle
Sie können Muster dafür verwenden:
Hier sehen Sie die vollständigen Tipps zur Benutzeroberfläche der mobilen Website .
quelle
Nachfolgend finden Sie die genannte Lösung. In diesen Benutzer in der Lage sein , können nur eingeben
numeric
Wert, kann auch Benutzer nicht in der Lage seincopy
,paste
,drag
unddrop
in der Eingabe.Lassen Sie mich wissen, wenn es nicht funktioniert.
quelle
Wenn Sie dem Gerät (möglicherweise einem Mobiltelefon) einen Vorschlag zwischen alphanumerisch oder numerisch vorschlagen möchten, können Sie diesen verwenden
<input type="number">
.quelle
Ein weiteres Beispiel , wo Sie können nur Zahlen in das Eingabefeld hinzufügen, können nicht Buchstaben
quelle
Eine kurze und süße Implementierung mit jQuery und replace (), anstatt event.keyCode oder event.which zu betrachten:
Nur kleiner Nebeneffekt, dass der getippte Buchstabe kurz erscheint und STRG / CMD + A sich etwas seltsam zu verhalten scheint.
quelle
input type="number"
ist ein HTML5-Attribut.Im anderen Fall hilft Ihnen dies:
quelle
var charCode = (evt.which) ? evt.which : evt.keyCode;
JavaScript-Code:
HTML Quelltext:
funktioniert perfekt, da der Backspace-Schlüsselcode 8 ist und ein Regex-Ausdruck dies nicht zulässt, sodass der Fehler auf einfache Weise umgangen werden kann :)
quelle
Eine einfache Möglichkeit, dieses Problem zu beheben, besteht darin, eine jQuery-Funktion zu implementieren, um die in das Textfeld eingegebenen Zeichen mit Regex zu überprüfen. Beispiel:
Ihr HTML-Code:
Und die js-Funktion mit jQuery
quelle
Nur eine andere Variante mit jQuery
quelle
Verwenden Sie jetzt type = "number". Dieses Attribut wird in den meisten Browsern unterstützt
quelle
--1
(2 minus Zeichen vor 1) sind.Sie können auch den Eingabewert (der standardmäßig als Zeichenfolge behandelt wird) mit sich selbst vergleichen, der als numerisch erzwungen wird, z.
Sie müssen dies jedoch an Ereignisse wie Keyup usw. binden.
quelle
quelle
Ich habe einige großartige Antworten gesehen, aber ich mag sie so klein und einfach wie möglich, also wird vielleicht jemand davon profitieren. Ich würde Javascript
Number()
undisNaN
Funktionen wie diese verwenden:Hoffe das hilft.
quelle
Verwenden Sie dieses DOM:
Und dieses Skript:
... ODER dieses Skript ohne indexOf mit zwei
for
...Ich habe das onkeydown-Attribut anstelle von onkeypress verwendet, da das onkeydown-Attribut vor dem onkeypress-Attribut überprüft wird. Das Problem wäre im Google Chrome-Browser.
Mit dem Attribut "onkeypress" wäre TAB mit "verhindernDefault" auf Google Chrome nicht steuerbar, mit dem Attribut "onkeydown" wird TAB jedoch steuerbar!
ASCII-Code für TAB => 9
Das erste Skript enthält weniger Code als das zweite. Das Array der ASCII-Zeichen muss jedoch alle Schlüssel enthalten.
Das zweite Skript ist viel größer als das erste, aber das Array benötigt nicht alle Schlüssel. Die erste Ziffer an jeder Position des Arrays gibt an, wie oft jede Position gelesen wird. Für jeden Messwert wird 1 auf den nächsten erhöht. Zum Beispiel:
NCount = 0
48 + NCount = 48
NCount + +
48 + NCount = 49
NCount + +
...
48 + NCount = 57
Bei numerischen Schlüsseln sind es nur 10 (0 - 9), aber wenn sie 1 Million wären, wäre es nicht sinnvoll, ein Array mit all diesen Schlüsseln zu erstellen.
ASCII-Codes:
quelle
Dies ist eine verbesserte Funktion:
quelle
Der beste Weg (ALLE Arten von Zahlen zulassen - echt negativ, echt positiv, ganzzahlig negativ, ganzzahlig positiv) ist:
quelle
Dies ist die erweiterte Version der geowa4-Lösung . Unterstützt
min
undmax
Attribute. Wenn die Zahl außerhalb des Bereichs liegt, wird der vorherige Wert angezeigt.Sie können es hier testen.
Verwendungszweck:
<input type=text class='number' maxlength=3 min=1 max=500>
Wenn die Eingänge dynamisch sind, verwenden Sie Folgendes:
quelle