Sto costruendo un'app Web che è principalmente per i browser mobili. Sto usando campi di input con tipo di numero, quindi (la maggior parte) i browser mobili invocano solo la tastiera numerica per una migliore esperienza utente. Questa app Web viene utilizzata principalmente nelle regioni in cui il separatore decimale è virgola, non punto, quindi ho bisogno di gestire entrambi i separatori decimali.
Come coprire tutto questo casino con punto e virgola?
Le mie scoperte:
Chrome desktop
- Tipo di input = numero
- L'utente inserisce "4,55" nel campo di inserimento
$("#my_input").val();
restituisce "455"- Non riesco a ottenere il valore corretto dall'input
Firefox desktop
- Tipo di input = numero
- L'utente inserisce "4,55" nel campo di inserimento
$("#my_input").val();
restituisce "4,55"- Va bene, posso sostituire la virgola con punto e ottenere il float corretto
Browser Android
- Tipo di input = numero
- L'utente inserisce "4,55" nel campo di inserimento
- Quando l'ingresso perde lo stato attivo, il valore viene troncato a "4"
- Confuso per l'utente
Windows Phone 8
- Tipo di input = numero
- L'utente inserisce "4,55" nel campo di inserimento
$("#my_input").val();
restituisce "4,55"- Va bene, posso sostituire la virgola con punto e ottenere il float corretto
Quali sono le "migliori pratiche" in questo tipo di situazioni in cui l'utente potrebbe usare la virgola o il punto come separatore decimale e voglio mantenere il tipo di input HTML come numero, per fornire una migliore esperienza utente?
Posso convertire la virgola in punto "al volo", vincolando eventi chiave, funziona con input numerici?
MODIFICARE
Currenlty Non ho alcuna soluzione, come ottenere il valore float (come stringa o numero) dall'input il cui tipo è impostato su numero. Se l'utente finale immette "4,55", Chrome restituisce sempre "455", Firefox restituisce "4,55", il che va bene.
Inoltre è abbastanza fastidioso che in Android (emulatore 4.2 testato), quando inserisco "4,55" per inserire il campo e cambio lo stato attivo da qualche altra parte, il numero inserito viene troncato a "4".
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
Ma quella soluzione funziona solo se il il numero inserito contiene solo 1 virgola e nessun punto extra ...
.val()
e Android fa qualcosa di strano. Puoi verificare se si comportano allo stesso modo quando imposti la lingua del sistema su qualcosa di appropriato?