【发布时间】:2013-02-24 14:01:42
【问题描述】:
我正在构建主要用于移动浏览器的网络应用程序。我使用数字类型的输入字段,因此(大多数)移动浏览器仅调用数字键盘以获得更好的用户体验。这个网页应用主要用于小数点分隔符是逗号而不是点的区域,所以我需要处理两个小数点分隔符。
如何用点和逗号覆盖整个混乱?
我的发现:
桌面浏览器
- 输入类型=数字
- 用户在输入字段中输入“4,55”
-
$("#my_input").val();返回“455” - 我无法从输入中获得正确的值
桌面火狐
- 输入类型=数字
- 用户在输入字段中输入“4,55”
-
$("#my_input").val();返回“4,55” - 没关系,我可以用点替换逗号并获得正确的浮点数
Android 浏览器
- 输入类型=数字
- 用户在输入字段中输入“4,55”
- 当输入失去焦点时,值被截断为“4”
- 让用户感到困惑
Windows Phone 8
- 输入类型=数字
- 用户在输入字段中输入“4,55”
-
$("#my_input").val();返回“4,55” - 没关系,我可以用点替换逗号并获得正确的浮点数
在这种情况下,当用户可能使用逗号或点作为小数分隔符并且我想将 html 输入类型保持为数字以提供更好的用户体验时,有哪些“最佳实践”?
我可以“即时”将逗号转换为点,绑定键事件,它是否适用于数字输入?
编辑
当前我没有任何解决方案,如何从类型设置为数字的输入中获取浮点值(作为字符串或数字)。如果最终用户输入“4,55”,Chrome 总是返回“455”,Firefox 返回“4,55”,这很好。
此外,在 Android(经过测试的 4.2 模拟器)中,当我在输入字段中输入“4,55”并将焦点转移到其他位置时,输入的数字会被截断为“4”,这也很烦人。
【问题讨论】:
-
我的猜测是您的一些问题的根本原因是浏览器设置为使用点作为小数分隔符的美国语言环境。似乎 Chrome 和 Android 以不同的方式对此感到困惑 - Chrome 将逗号视为数字分隔符,然后将输入转换为数字,然后再次将其转换为
.val()的字符串,Android 做了一些奇怪的事情。当您将系统语言设置为适当的语言时,您能否检查它们的行为是否相同? -
Nvm 将此作为答案发布
-
情况比你描述的还要糟糕:你在 WP 小键盘上得到一个小数点或逗号,这取决于你选择键盘工作的语言。也没有办法找出输入语言环境(不一定是首选的浏览器语言)......所以我能想到的最好的(对我来说足够好的)是:
var number = $(...).get(0).valueAsNumber;if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');但是该解决方案仅在输入的数字仅包含 1 个逗号且没有多余的点时才有效...
标签: javascript jquery mobile floating-point html-input