Я будую веб-додаток, в основному для мобільних браузерів. Я використовую поля введення з типом номера, тому (більшість) мобільних браузерів використовує лише цифрову клавіатуру для кращого користування. Цей веб-додаток використовується в основному в регіонах, де десятковий роздільник є комою, а не крапкою, тому мені потрібно обробляти обидва десяткових роздільника.
Як прикрити весь цей безлад крапкою і комою?
Мої висновки:
Настільний Chrome
- Тип вводу = число
- Користувач вводить "4,55" у поле введення
$("#my_input").val();
повертає "455"- Я не можу отримати правильне значення з введення
Настільний Firefox
- Тип вводу = число
- Користувач вводить "4,55" у поле введення
$("#my_input").val();
повертає "4,55"- Це добре, я можу замінити кому крапкою і отримати правильний поплавок
Браузер Android
- Тип вводу = число
- Користувач вводить "4,55" у поле введення
- Коли вхід втрачає фокус, значення скорочується до "4"
- Конфуз для користувача
Windows Phone 8
- Тип вводу = число
- Користувач вводить "4,55" у поле введення
$("#my_input").val();
повертає "4,55"- Це добре, я можу замінити кому крапкою і отримати правильний поплавок
Які "найкращі практики" в подібних ситуаціях, коли користувач може використовувати коску або крапку як десятковий роздільник, і я хочу зберегти тип введення html як число, щоб забезпечити кращу роботу користувачів?
Чи можу я перетворити кому в крапку "на льоту", прив'язуючи ключові події, чи працює вона з введеннями чисел?
EDIT
Currenlty У мене немає рішення, як отримати значення float (як рядок або число) з введення, тип якого встановлений на число. Якщо ендузер вводить "4,55", Chrome повертає завжди "455", Firefox повертає "4,55", що нормально.
Також дуже дратує те, що в Android (перевірений емулятор 4.2), коли я ввожу "4,55" для поля введення та змінюю фокус на інше, введене число стає усіченим на "4".
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
Але це рішення працює лише в тому випадку, коли число, яке було введено, містить лише 1
.val()
, а Android робить щось дивне. Чи можете ви перевірити, чи поводяться вони однаково, коли ви встановите системну мову на щось відповідне?