在HTML5数字输入中强制小数点而不是逗号(客户端)

cho*_*ata 67 html5 types numbers input decimal

我已经看到一些浏览器本地化input type="number"数字的表示法.

所以现在,在我的应用程序显示经度和纬度坐标的字段中,我得到像"51,983"这样的东西,它应该是"51.982559".我的解决方法是使用input type="text",但我想使用数字输入正确显示小数.

有没有办法强制浏览器在数字输入中使用小数点,无论客户端本地设置如何?

(不言而喻,在我的应用程序中,我无论如何都要在服务器端纠正这一点,但在我的设置中我还需要它在客户端是正确的(因为一些JavaScript)).

提前致谢.

更新 截至目前,在Windows 7上检查Chrome版本28.0.1500.71 m,输入的数字不接受用逗号格式化的小数.使用该step属性的建议建议似乎不起作用.

http://jsfiddle.net/AsJsj/

Ash*_*bry 19

目前,Firefox尊重输入所在的HTML元素的语言.例如,在Firefox中尝试这个小提琴:

http://jsfiddle.net/ashraf_sabry_m/yzzhop75/1/

您将看到数字是阿拉伯语,逗号用作小数分隔符,阿拉伯语就是这种情况.这是因为BODY标签被赋予了属性lang="ar-EG".

接下来,尝试这个:

http://jsfiddle.net/ashraf_sabry_m/yzzhop75/2/

显示一个点作为小数分隔符,因为输入包含在DIV给定的属性中lang="en-US".

因此,您可以使用的解决方案是使用容器元素包装数字输入,该容器元素设置为使用使用点作为小数分隔符的区域性.

  • Firefox尊重页面的语言设置.Chrome会强制使用操作系统或浏览器的小数分隔符吗?无论页面,浏览器或操作系统的语言设置如何,Edge都会施加小数点.真是一团糟. (4认同)
  • 有趣!不幸的是,它似乎只能在Firefox中运行,而不能在Chrome中运行(47.0.2526.106) (3认同)
  • 您不需要包装元素。您可以直接在输入元素上设置“lang”属性。 (3认同)
  • “lang”属性实际上对我产生了影响,谢谢! (2认同)

Pet*_*ter 18

如果将step属性指定为所需小数的精度,则html5数字输入将接受小数.例如.取值10.56; 我是指2位小数,请执行以下操作:

<input type="number" step="0.01" min="0" lang="en" value="1.99">
Run Code Online (Sandbox Code Playgroud)

您可以进一步指定最大允许值的max属性.

编辑使用语言环境值为输入元素 添加 lang属性,该值使用点而不是逗号格式化小数

  • 这仍然不起作用:-(客户端本地值始终使用小数逗号转换小数点,无论步骤或值属性.:-( (24认同)
  • 据我所知,问题不在于有一个小数分隔符.问题是关于'''.而不是','当客户的区域设置更喜欢','. (11认同)

Hal*_*gür 9

根据规范,您可以使用属性any的值step:

<input type="number" step="any">
Run Code Online (Sandbox Code Playgroud)


小智 7

在输入上使用 lang 属性。我的网络应用程序 fr_FR 上的语言环境,输入数字上的 lang="en_EN" 并且我可以无差别地使用逗号或点。Firefox 总是显示一个点,Chrome 显示一个逗号。但两个分隔符都是有效的。


Mat*_*y K 6

我发现一篇博客文章似乎解释了一些相关的内容:
Chrome 中的 HTML5 input type=number and decimals/floats

总之:

  • step有助于定义有效值的域
  • 默认step1
  • 因此默认域是整数(在min和之间max,包括,如果给定)

我认为这与使用逗号作为千位分隔符与使用逗号作为小数点的歧义相混淆,而您51,983的实际上是一个奇怪的解析 51009983。

显然,您可以使用step="any"将域扩大到范围内的所有有理数,但是我自己没有尝试过。对于纬度和经度,我已成功使用:

<input name="lat" type="number" min="-90.000000" max="90.000000" step="0.000001">
<input name="lon" type="number" min="-180.000000" max="180.000000" step="0.000001">
Run Code Online (Sandbox Code Playgroud)

它可能不漂亮,但它有效。


opa*_*ela 6

遗憾的是,这个输入字段在现代浏览器中的覆盖率非常低:

http://caniuse.com/#feat=input-number

因此,我建议期待回退并依靠大量编程加载的 input[type=text] 来完成这项工作,直到该领域被普遍接受。

到目前为止,只有 Chrome、Safari 和 Opera 有一个简洁的实现,但所有其他浏览器都有缺陷。其中一些,甚至似乎不支持小数(如 BB10)!


And*_*loi 5

我不知道这是否有帮助,但我在搜索同样的问题时偶然发现了这里,仅从输入的角度来看(即我注意到我<input type="number" />在输入值时接受了逗号和点,但只有后者是绑定到我分配给输入的 angularjs 模型)。所以我通过记下这个快速指令来解决:

.directive("replaceComma", function() {
    return {
        restrict: "A",
        link: function(scope, element) {
            element.on("keydown", function(e) {
                if(e.keyCode === 188) {
                    this.value += ".";
                    e.preventDefault();
                }
            });
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

然后,在我的 html 上,简单地:<input type="number" ng-model="foo" replace-comma />将即时用点替换逗号,以防止用户输入无效(从 javascript 的角度来看,而不是语言环境!)数字。干杯。

  • 当然,我想你可以在每个数字输入的基础上编写类似`$("input[type=number]").on("keydown", function(e) { if(e.keyCode == = 188) { this.value += "."; e.preventDefault(); }});`(一旦您的页面与所有数字输入一起完全加载) (5认同)
  • 此代码段不适用于 chrome(使用 v60 测试)。当输入 `888,` 时,设置 `value` 属性会抛出一个警告,指出 `888.` 不是一个有效的数字(正则表达式要求点后至少有一个数字)并将该字段留空。输入一个点虽然有效,可能是因为输入认为它的值“正在进行中”并等待输入更多数字 (2认同)

Jas*_*aro 2

据我了解,HTML5input type="number总是input.valuestring.

显然,input.valueAsNumber以浮点数形式返回当前值。您可以使用它来返回您想要的值。

请参阅http://diveintohtml5.info/forms.html#type-number