Estoy construyendo una aplicación web que es principalmente para navegadores móviles. Estoy usando campos de entrada con tipo de número, por lo que (la mayoría) los navegadores móviles invocan solo el teclado numérico para una mejor experiencia del usuario. Esta aplicación web se usa principalmente en regiones donde el separador decimal es una coma, no un punto, por lo que necesito manejar ambos separadores decimales.
¿Cómo cubrir todo este desastre con punto y coma?
Mis hallazgos:
Chrome de escritorio
- Tipo de entrada = número
- El usuario ingresa "4,55" al campo de entrada
$("#my_input").val();
devuelve "455"- No puedo obtener el valor correcto de la entrada
Desktop Firefox
- Tipo de entrada = número
- El usuario ingresa "4,55" al campo de entrada
$("#my_input").val();
devuelve "4,55"- Está bien, puedo reemplazar la coma con un punto y obtener el flotador correcto
Navegador de Android
- Tipo de entrada = número
- El usuario ingresa "4,55" al campo de entrada
- Cuando la entrada pierde el foco, el valor se trunca a "4"
- Confuso para el usuario
Windows Phone 8
- Tipo de entrada = número
- El usuario ingresa "4,55" al campo de entrada
$("#my_input").val();
devuelve "4,55"- Está bien, puedo reemplazar la coma con un punto y obtener el flotador correcto
¿Cuáles son las "mejores prácticas" en este tipo de situaciones en las que el usuario puede usar coma o punto como separador decimal y quiero mantener el tipo de entrada html como número, para proporcionar una mejor experiencia de usuario?
¿Puedo convertir una coma en punto "sobre la marcha", vinculando eventos clave, ¿funciona con entradas numéricas?
EDITAR
Actualmente no tengo ninguna solución, cómo obtener un valor flotante (como cadena o número) de la entrada cuyo tipo se establece en número. Si el usuario final ingresa "4,55", Chrome devuelve siempre "455", Firefox devuelve "4,55", lo cual está bien.
También es bastante molesto que en Android (probado el emulador 4.2), cuando ingreso "4,55" para ingresar el campo y cambio el foco a otro lugar, el número ingresado se trunca a "4".
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
Pero esa solución solo funciona si el el número que se ha introducido solo contiene 1 coma y ningún punto extra ...
.val()
y Android hace algo extraño. ¿Puede verificar si se comportan igual cuando configura el idioma del sistema en algo apropiado?