Я создаю веб-приложение, которое в основном предназначено для мобильных браузеров. Я использую поля ввода с числовым типом, поэтому (большинство) мобильных браузеров вызывает только цифровую клавиатуру для лучшего взаимодействия с пользователем. Это веб-приложение в основном используется в регионах, где десятичным разделителем является запятая, а не точка, поэтому мне нужно обрабатывать оба десятичных разделителя.
Как покрыть весь этот беспорядок точкой и запятой?
Мои выводы:
Настольный 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 как число, чтобы улучшить взаимодействие с пользователем?
Могу ли я преобразовать запятую в точку «на лету», привязав ключевые события, работает ли он с числовым вводом?
РЕДАКТИРОВАТЬ
Currenlty У меня нет решения, как получить значение с плавающей запятой (как строку или число) из ввода, тип которого установлен на число. Если конечный пользователь вводит «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 делает что-то странное. Можете ли вы проверить, ведут ли они себя так же, когда вы устанавливаете язык системы на что-нибудь подходящее?