How can i get the "real" value of an <input type="number">
field?
I have an input
box, and i'm using newer HTML5 input type number
:
<input id="edQuantity" type="number">
This is mostly supported in Chrome 29:
What i now need is the ability to read the "raw" value the user has entered in the input box. If the user has entered a number:
then edQuantity.value = 4
, and all is well.
But if the user enters invalid text, i want to color the input-box red:
Unfortunately, for a type="number"
input box, if the value in the text-box is not a number then value
returns an empty string:
edQuantity.value = "" (String);
(in Chrome 29 at least)
How can i get the "raw" value of an <input type="number">
control?
i tried looking through Chrome's list of other properties of the input box:
i didn't see anything that resembles the actual input.
Nor could i find a way to tell if the box "is empty", or not. Maybe i could have inferred:
value isEmpty Conclusion
============= ============= ================
"4" false valid number
"" true empty box; not a problem
"" false invalid text; color it red
Note: You can ignore everything after the horizontal rule; it's just filler to justify the question. Also: don't confuse the example with the question. People might want the answer to this question for reasons other than coloring the box red (One example: converting the text "four"
into the latin "4"
symbol during the onBlur event)
How can i get the "raw" value of an <input type="number">
control?
Track all pressed keys based on their key codes
I suppose one could listen to the keyup events and keep an array of all characters entered, based on their keycodes. But it's a pretty tedious task and probably prone to bugs.
http://unixpapa.com/js/key.html
Select the input and get the selection as a string
All credit to: int32_t
According to the WHATWG, you shouldn't be able to get the value unless it's valid numeric input. The input number field's sanitization algorithm says the browser is supposed to set the value to an empty string if the input isn't a valid floating point number.
By specifying the type (
<input type="number">
) you're asking the browser to do some work for you. If, on the other hand, you'd like to be able to capture the non-numeric input and do something with it, you'd have to rely on the old tried and true text input field and parse the content yourself.The W3 also has the same specs and adds:
It doesn't answer the question, but the useful workaround is to check
The
ValidityState
of an object gives clues about what the user entered. Consider atype="number"
input with amin
andmax
setWe always want to use
.validity.valid
.Other properties only give bonus information:
You'll have to ensure that the the browser supports HTML5 validation before using it:
Bonus
Spudly has a useful answer that he deleted: