Wie kann ich den "echten" Wert eines <input type="number">
Feldes ermitteln?
Ich habe eine input
Box und verwende einen neueren HTML5-Eingabetyp number
:
<input id="edQuantity" type="number">
Dies wird hauptsächlich in Chrome 29 unterstützt:
Was ich jetzt brauche, ist die Fähigkeit, den "rohen" Wert zu lesen, den der Benutzer in das Eingabefeld eingegeben hat. Wenn der Benutzer eine Nummer eingegeben hat:
dann edQuantity.value = 4
und alles ist gut.
Aber wenn der Benutzer ungültigen Text eingibt, möchte ich das Eingabefeld rot färben:
type="number"
Wenn für ein Eingabefeld der Wert im Textfeld keine Zahl ist, wird leider value
eine leere Zeichenfolge zurückgegeben:
edQuantity.value = "" (String);
(mindestens in Chrome 29)
Wie kann ich den "rohen" Wert eines <input type="number">
Steuerelements ermitteln?
Ich habe versucht, die Liste der anderen Eigenschaften des Eingabefelds in Chrome zu durchsuchen:
Ich habe nichts gesehen, was der tatsächlichen Eingabe ähnelt.
Ich konnte auch nicht feststellen, ob die Box "leer" ist oder nicht. Vielleicht hätte ich folgern können:
value isEmpty Conclusion
============= ============= ================
"4" false valid number
"" true empty box; not a problem
"" false invalid text; color it red
Hinweis : Sie können alles nach der horizontalen Regel ignorieren. Es ist nur Füllstoff, um die Frage zu rechtfertigen. Außerdem: Verwechseln Sie das Beispiel nicht mit der Frage. Die Antwort auf diese Frage kann aus anderen Gründen als der roten Färbung des Kästchens gewünscht werden (Ein Beispiel: Konvertieren des Textes "four"
in das lateinische "4"
Symbol während des onBlur-Ereignisses)
Wie kann ich den "rohen" Wert eines <input type="number">
Steuerelements ermitteln?
Bonuslesung
quelle
number
ist dies nicht der Eingabetyp, den Sie suchen. Verwenden Sie einen normalentext
Eingang.validity
Status des Feldes - ich würde erwarten,typeMismatch
aber ich habe mich nicht überprüft.blah
ist eine ungültige Nummer".Antworten:
Laut WHATWG sollten Sie den Wert nur erhalten können, wenn es sich um eine gültige numerische Eingabe handelt. Der Bereinigungsalgorithmus des Eingabezahlenfelds besagt, dass der Browser den Wert auf eine leere Zeichenfolge setzen soll, wenn die Eingabe keine gültige Gleitkommazahl ist.
Durch Angabe des Typs (
<input type="number">
) fordern Sie den Browser auf, einige Arbeiten für Sie auszuführen. Wenn Sie andererseits in der Lage sein möchten, die nicht numerische Eingabe zu erfassen und etwas damit zu tun, müssen Sie sich auf das alte und bewährte Texteingabefeld verlassen und den Inhalt selbst analysieren.Der W3 hat auch die gleichen Spezifikationen und fügt hinzu:
quelle
<input type="number">
) fordern Sie den Browser auf, einige Arbeiten für Sie auszuführen. Persönlich habe ich nur mobile Browser gebeten, einen Ziffernblock anzuzeigen, und die Validierung als unangenehmes Extra erhalten. Die meisten dieser Probleme sind darauf zurückzuführen, dass dastype
Attribut sowohl Validierungsregeln als auch Regeln für den anzuzeigenden Eingabemechanismus festlegt. Es ist jedoch durchaus möglich, mobilen Benutzern eine numerische Tastatur anzuzeigen, ohne dass die Nummernvalidierung auch auf Desktopbenutzer angewendet werden soll. HTML 5.1 wird dieses Problem zumindest mit deminputmode
Attribut lösen .Die Frage wird nicht beantwortet, aber die nützliche Problemumgehung besteht darin, sie zu überprüfen
Das
ValidityState
eines Objekts gibt Hinweise darauf, was der Benutzer eingegeben hat. Betrachten Sie einetype="number"
Eingabe mit amin
undmax
setWir wollen immer verwenden
.validity.valid
.Andere Eigenschaften geben nur Bonusinformationen:
Sie müssen sicherstellen, dass der Browser die HTML5-Validierung unterstützt, bevor Sie ihn verwenden:
Bonus
Spudly hat eine nützliche Antwort, die er gelöscht hat:
quelle
.validity
Eigenschaft, behandelt sie aber nicht richtig.valid
?!typeMismatch
mag Sinn machen, aber das ist nur für E-Mail- oder URL-Typen…required
).badInput
wurde am 20.11.2012 hinzugefügt . Aber niemand sollte nachsehenbadInput
, ob die Eingabe gültig ist. sie sollten schauen.valid
. Es ist möglich (und richtig).badInput
, falsch zu sein und dennoch ungültige Eingaben zu haben..valid
ist definiert als das Fehlen von Validierungsfehlern (z. B. Fehlanpassungen, Überläufe, Unterläufe), von denen.badInput
nur eine Art von Fehler vorliegt. Beachten Sie die obige Tabelle, in der.badInput
false angegeben ist, die Eingabe jedoch weiterhin ungültig ist.quelle
Verfolgen Sie alle gedrückten Tasten anhand ihrer Tastencodes
Ich nehme an, man könnte die Keyup-Ereignisse abhören und eine Reihe aller eingegebenen Zeichen basierend auf ihren Keycodes beibehalten. Aber es ist eine ziemlich mühsame Aufgabe und wahrscheinlich anfällig für Fehler.
http://unixpapa.com/js/key.html
Wählen Sie die Eingabe und erhalten Sie die Auswahl als Zeichenfolge
Alle Gutschriften an: int32_t
quelle
Delete
,Backspace
,Ctrl+X
,Ctrl+V
,Right-click-cut
,Right-click-paste
.