Ich habe eine <input type="number">
und ich möchte die Eingabe der Benutzer auf reine Zahlen oder Zahlen mit Dezimalstellen bis zu 2 Dezimalstellen beschränken.
Grundsätzlich bitte ich um eine Preisangabe.
Ich wollte Regex vermeiden. Gibt es eine Möglichkeit, dies zu tun?
<input type="number" required name="price" min="0" value="0" step="any">
type="text"
sowieso zurück. Was macht es also aus?Antworten:
Anstatt
step="any"
, die für eine beliebige Anzahl von Dezimalstellen erlaubt, die Verwendungstep=".01"
, die bis zu zwei Dezimalstellen erlaubt.Weitere Details in der Spezifikation: https://www.w3.org/TR/html/sec-forms.html#the-step-attribute
quelle
500.12345
in einer der Eingaben einzugeben. Vielleicht ist unser Verständnis der Anforderungen anders.:valid
und:invalid
wie erwartet angewendet werden.Wenn jemand nach einem regulären Ausdruck sucht, der nur Zahlen mit optionalen 2 Dezimalstellen zulässt
Zum Beispiel habe ich unten eine Lösung gefunden, die ziemlich zuverlässig ist
HTML:
JS / JQuery:
quelle
setTimeout()
warten muss, bis daskeydown
Ereignis abgeschlossen ist, bevornewVal
ich das einstelle (andernfalls ist es dasselbe wie dasoldVal
). Bei einem Timeout von 0 ist dies jedoch sinnlos und funktioniert nicht, da beide Werte häufig gleich sind (in Firefox). Wenn Sie es beispielsweise auf 1 setzen, funktioniert es einwandfrei.Für die Währung würde ich vorschlagen:
Siehe http://jsfiddle.net/vx3axsk5/1/
Die HTML5-Eigenschaften "step", "min" und "pattern" werden beim Senden des Formulars überprüft, nicht bei Unschärfe. Sie brauchen das nicht,
step
wenn Sie ein haben,pattern
und Sie brauchen kein,pattern
wenn Sie ein habenstep
. Sie können alsostep="any"
mit meinem Code zurückkehren, da das Muster ihn sowieso validiert.Wenn Sie onblur validieren möchten, ist es meiner Meinung nach auch hilfreich, dem Benutzer einen visuellen Hinweis zu geben, z. B. den Hintergrund rot zu färben. Wenn der Browser des Benutzers dies nicht unterstützt
type="number"
, wird auf zurückgegriffentype="text"
. Wenn der Browser des Benutzers die HTML5-Musterüberprüfung nicht unterstützt, verhindert mein JavaScript-Snippet nicht das Senden des Formulars, gibt jedoch einen visuellen Hinweis. Für Personen mit schlechter HTML5-Unterstützung und Personen, die versuchen, mit deaktiviertem JavaScript in die Datenbank zu hacken oder HTTP-Anforderungen zu fälschen, müssen Sie die Überprüfung auf dem Server trotzdem erneut durchführen. Der Punkt mit der Validierung im Front-End ist für eine bessere Benutzererfahrung. Solange die meisten Ihrer Benutzer eine gute Erfahrung haben, können Sie sich auf HTML5-Funktionen verlassen, vorausgesetzt, der Code funktioniert weiterhin und Sie können ihn im Back-End überprüfen.quelle
pattern
funktioniert nicht fürinput type=number
:<input type="number"> elements do not support use of the pattern attribute for making entered values conform to a specific regex pattern. The rationale for this is that number inputs can't contain anything except numbers, and you can constrain the minimum and maximum number of valid digits using the min and max attributes, as explained above.
Schritt 1: Verknüpfen Sie Ihr Eingabefeld für die HTML-Nummer mit einem Onchange-Ereignis
oder im HTML-Code
Schritt 2: Schreiben Sie die
setTwoDecimalPlace
MethodeSie können die Anzahl der Dezimalstellen ändern, indem Sie den an die
toFixed()
Methode übergebenen Wert variieren . Siehe MDN-Dokumente .quelle
Ich fand, dass die Verwendung von jQuery meine beste Lösung war.
quelle
Versuchen Sie dies, um nur 2 Dezimalstellen im Eingabetyp zuzulassen
Oder verwenden Sie jQuery, wie von @SamohtVII vorgeschlagen
quelle
Verwenden Sie diesen Code
Standardmäßig ist der Schrittwert für HTML5-Eingabeelemente step = "1".
quelle
einfach schreiben
lang = 'nb "lässt Sie Ihre Dezimalzahlen mit Komma oder Punkt schreiben
quelle
Bei Eingabe:
Im Skript:
quelle