Je construis une application web qui est principalement destinée aux navigateurs mobiles. J'utilise des champs de saisie de type numérique, de sorte que (la plupart) des navigateurs mobiles n'invoquent que le clavier numérique pour une meilleure expérience utilisateur. Cette application web est principalement utilisée dans des régions où le séparateur décimal est une virgule, et non un point, donc je dois gérer les deux séparateurs décimaux.
Comment couvrir tout ce désordre avec le point et la virgule ?
Mes conclusions :
Chrome de bureau
- Type d'entrée=numéro
- L'utilisateur saisit "4,55" dans le champ de saisie.
-
$("#my_input").val();
renvoie "455" - Je n'arrive pas à obtenir la valeur correcte de l'entrée
Desktop Firefox
- Type d'entrée=numéro
- L'utilisateur saisit "4,55" dans le champ de saisie.
-
$("#my_input").val();
retourne "4,55" - C'est bien, je peux remplacer la virgule par un point et obtenir un flotteur correct.
Navigateur Android
- Type d'entrée=numéro
- L'utilisateur saisit "4,55" dans le champ de saisie.
- Lorsque l'entrée perd le focus, la valeur est tronquée à "4".
- Confusion pour l'utilisateur
Windows Phone 8
- Type d'entrée=numéro
- L'utilisateur saisit "4,55" dans le champ de saisie.
-
$("#my_input").val();
retourne "4,55" - C'est bien, je peux remplacer la virgule par un point et obtenir un flotteur correct.
Quelles sont les "meilleures pratiques" dans ce type de situation, lorsque l'utilisateur peut utiliser une virgule ou un point comme séparateur décimal et que je souhaite conserver le type d'entrée html comme nombre, afin de fournir une meilleure expérience utilisateur ?
Puis-je convertir les virgules en points "à la volée", en liant les événements de touche, cela fonctionne-t-il avec les entrées numériques ?
EDITAR
Actuellement, je n'ai pas de solution pour obtenir une valeur flottante (sous forme de chaîne ou de nombre) à partir d'une entrée dont le type est défini comme un nombre. Si l'utilisateur saisit "4,55", Chrome renvoie toujours "455", Firefox renvoie "4,55", ce qui est correct.
Il est également assez ennuyeux que dans Android (émulateur 4.2 testé), lorsque je saisis "4,55" dans le champ de saisie et que je change le focus sur autre chose, le nombre saisi est tronqué à "4".
0 votes
Je pense que la cause première de certains de vos problèmes est que les navigateurs sont réglés sur une locale américaine qui utilise le point comme séparateur décimal. Il semble que Chrome et Android s'y perdent de différentes manières : Chrome traite la virgule comme un séparateur de chiffres, puis convertit l'entrée en un nombre, avant de la convertir à nouveau en une chaîne de caractères pour
.val()
et Android fait quelque chose de bizarre. Pouvez-vous vérifier s'ils se comportent de la même manière lorsque vous définissez la langue du système sur quelque chose d'approprié ?1 votes
Nvm a posté ceci comme une réponse
0 votes
Voir aussi ici : stackoverflow.com/a/24423879/196210
0 votes
La situation est encore pire que ce que vous avez décrit : vous obtenez un point décimal ou une virgule sur le numpad WP en fonction de la langue dans laquelle vous avez choisi de faire fonctionner votre clavier. Il n'y a également aucun moyen de savoir quelle était la locale d'entrée (pas nécessairement la langue préférée du navigateur)... Donc, le mieux que j'ai pu trouver (et ce qui est suffisant pour moi) est le suivant :
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
Mais cette solution ne fonctionne que si le numéro qui a été mis ne contient qu'une virgule et aucun point supplémentaire...