我正在构建主要用于移动浏览器的Web应用程序。我使用数字类型的输入字段,因此(大多数)移动浏览器仅调用数字键盘以提供更好的用户体验。此Web应用程序主要用于小数点分隔符是逗号而不是点的区域,因此我需要处理两个小数点分隔符。
如何用点和逗号覆盖整个混乱局面?
我的发现:
桌面版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则有些奇怪。将系统语言设置为适当的语言时,是否可以检查它们的行为是否相同?