¿Cómo puedo obtener el valor "real" de un <input type="number">
campo?
Tengo una input
caja y estoy usando un tipo de entrada HTML5 más nuevo number
:
<input id="edQuantity" type="number">
Esto es principalmente compatible con Chrome 29:
Lo que ahora necesito es la capacidad de leer el valor "sin procesar" que el usuario ingresó en el cuadro de entrada. Si el usuario ha introducido un número:
entonces edQuantity.value = 4
, y todo va bien.
Pero si el usuario ingresa texto no válido, quiero colorear el cuadro de entrada de rojo:
Desafortunadamente, para un type="number"
cuadro de entrada, si el valor en el cuadro de texto no es un número, entonces value
devuelve una cadena vacía:
edQuantity.value = "" (String);
(en Chrome 29 al menos)
¿Cómo puedo obtener el valor "bruto" de un <input type="number">
control?
Intenté buscar en la lista de Chrome de otras propiedades del cuadro de entrada:
No vi nada que se parezca a la entrada real.
Tampoco pude encontrar una manera de saber si la casilla "está vacía" o no. Tal vez podría haber inferido:
value isEmpty Conclusion
============= ============= ================
"4" false valid number
"" true empty box; not a problem
"" false invalid text; color it red
Nota : puede ignorar todo después de la regla horizontal; es solo un relleno para justificar la pregunta. Además: no confunda el ejemplo con la pregunta. La gente puede querer la respuesta a esta pregunta por otras razones además de colorear el cuadro de rojo (Un ejemplo: convertir el texto "four"
en el "4"
símbolo latino durante el evento onBlur)
¿Cómo puedo obtener el valor "bruto" de un <input type="number">
control?
Lectura adicional
fuente
number
no es el tipo de entrada que está buscando; utilice unatext
entrada normal .validity
estado del campo ; lo esperaría,typeMismatch
pero no lo he verificado.blah
es un número inválido".Respuestas:
De acuerdo con WHATWG , no debería poder obtener el valor a menos que sea una entrada numérica válida. El algoritmo de desinfección del campo del número de entrada dice que se supone que el navegador debe establecer el valor en una cadena vacía si la entrada no es un número de punto flotante válido.
Al especificar el tipo (
<input type="number">
) le está pidiendo al navegador que haga un trabajo por usted. Si, por otro lado, desea poder capturar la entrada no numérica y hacer algo con ella, tendrá que confiar en el antiguo campo de entrada de texto probado y verdadero y analizar el contenido usted mismo.El W3 también tiene las mismas especificaciones y agrega:
fuente
<input type="number">
) le está pidiendo al navegador que haga un trabajo por usted. Personalmente, solo estaba pidiendo a los navegadores móviles que mostraran un teclado numérico y obtuve la validación como un extra desagradable. La mayoría de estos problemas surgen del hecho de que eltype
atributo determina tanto las reglas de validación como las reglas sobre qué mecanismo de entrada mostrar, pero es muy posible querer mostrar un teclado numérico a los usuarios de dispositivos móviles sin que también se desee aplicar la validación de números a los usuarios de escritorio. HTML 5.1 al menos resolverá este problema eventualmente con elinputmode
atributo.No responde a la pregunta, pero la solución útil es verificar
La
ValidityState
de un objeto da pistas sobre lo que ingresó el usuario. Considere unatype="number"
entrada con amin
ymax
establezcaNosotros siempre queremos utilizar
.validity.valid
.Otras propiedades solo brindan información adicional:
Tendrá que asegurarse de que el navegador admita la validación HTML5 antes de usarlo:
Prima
Spudly tiene una respuesta útil que eliminó:
fuente
.validity
propiedad, ¡pero no la maneja correctamente.valid
?!typeMismatch
podría tener sentido, pero eso es solo para los tipos de correo electrónico o URL ...required
).badInput
se agregó el 20/11/2012 . Pero nadie debería mirarbadInput
para ver si la entrada es válida; deberían estar mirando.valid
. Es posible (y correcto).badInput
que sea falso y aún tenga una entrada no válida..valid
se define como la ausencia de errores de validación (por ejemplo, desajustes, desbordamientos, subdesbordamientos), de los cuales.badInput
es solo un tipo de error. Tenga en cuenta el gráfico anterior donde.badInput
es falso, pero la entrada aún no es válida.fuente
Seguimiento de todas las teclas presionadas según sus códigos de tecla
Supongo que uno podría escuchar los eventos de activación de teclas y mantener una matriz de todos los caracteres ingresados, según sus códigos de teclas. Pero es una tarea bastante tediosa y probablemente propensa a errores.
http://unixpapa.com/js/key.html
Seleccione la entrada y obtenga la selección como una cadena
Todo crédito a: int32_t
fuente
Delete
,Backspace
,Ctrl+X
,Ctrl+V
,Right-click-cut
,Right-click-paste
.