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?
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.
The value sanitization algorithm is as follows: If the value of the element is not a valid floating-point number, then set it to the empty string instead.
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:
User agents must not allow the user to set the value to a non-empty string that is not a valid floating-point number.