Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 输入类型编号的本地化_Javascript_Html_Localization - Fatal编程技术网

Javascript 输入类型编号的本地化

Javascript 输入类型编号的本地化,javascript,html,localization,Javascript,Html,Localization,我在一个运行于Chrome的web应用程序上工作,其中输入的类型为number。在我的语言环境中,逗号用于十进制数字,空格用于千位分隔(没那么重要),但当我在数字字段中输入这些字符时,它们会被简单地删除,有效地将金额增加了100 我已经在浏览器设置和页面上设置了语言,但是我仍然需要使用句点来表示小数。是否有任何方法可以将字段配置为接受逗号 或者,我必须使用javascript解决这个问题。我想我可以处理keydown事件,并根据用户类型将逗号改为句点,但这不会提供良好的用户体验,不是吗?那么,如

我在一个运行于Chrome的web应用程序上工作,其中输入的类型为
number
。在我的语言环境中,逗号用于十进制数字,空格用于千位分隔(没那么重要),但当我在数字字段中输入这些字符时,它们会被简单地删除,有效地将金额增加了100

我已经在浏览器设置和页面上设置了语言,但是我仍然需要使用句点来表示小数。是否有任何方法可以将字段配置为接受逗号


或者,我必须使用javascript解决这个问题。我想我可以处理keydown事件,并根据用户类型将逗号改为句点,但这不会提供良好的用户体验,不是吗?那么,如何在代码中以最小的占用空间实现这一点呢?

不幸的是,

请参见此处的规格:


这是你想要的格式吗

HTML5
input type=number
从本地化的角度来看是不够的,这是由于定义和实现的原因。这意味着要本地化,但要根据浏览器的区域设置进行,而作为设计师/作者,您甚至无法设置该区域设置

在我的Chrome浏览器上,
input type=number step=0.001
接受1,2(带逗号)并将其作为1.2发送,接受1.200(带句点),可以明显地将其转换为1200并发送。当浏览器区域设置为芬兰语时,事情或多或少就是这样。但是它不能接受1200(这是芬兰语写1200的标准方式),而是只发送数字1


所以这是相当绝望的。使用任何你能找到的JavaScript小部件,或者一个简单的文本输入框。任何东西都可能比
input type=number
更好,除非所有用户使用具有相同区域设置的浏览器,并且对数字格式有相同的期望。

规范很明确:只允许使用句点作为小数分隔符。由浏览器提供表单。不允许使用1000个分隔符。

如果您不需要上/下标记,那么下面的解决方法可以帮助您:

仅适用于逗号(,)(如德语语法):

另外,lang“global”属性可以在没有自己的lang属性的情况下更改所有输入元素的行为(thx@florian):

<html lang="en">

见:

有效语言值列表:

当Chrome使用浏览器设置时,Firefox没有。至少不总是这样-例如,
标记中有lang属性时,Firefox会使用这个属性

但是,您也可以将lang属性直接传递给
标记。 将其与Navigator API结合可以模拟色度行为

React中的最小示例:



你真的想让箭头上下移动吗?这不是问题所在。此外,我已经用CSS删除了箭头。然后我认为你不应该使用,我想这是一个解决方案,但我真的认为这是浏览器供应商应该支持的。2019年仍然是一个问题!某种程度上,虽然我需要将模式更改为
-?\d+(|,\d{2})
以包含负数:)不用担心,希望能有所帮助。如果标记的属性允许整数以外的数字,则可以接受十进制分隔符,例如
。是的,你是对的,正如你在回答中解释得很好,允许的字符将取决于浏览器的区域设置,十进制分隔符或千位分隔符将相应更改。@Jørgen严格要求,避免使用管道字符。此外,您还应该允许使用一位数字<代码> -\d+((d{1,2})?< /代码>好博客文章:)我发现自从发布这个问题以来,它在这方面已经有了一些发展。这一点也很好:请同时考虑在移动设备上,输入类型=“数字”的控件可能看起来不同(数字键盘),而对于类型=“text”,您将无法得到额外的控制。我个人发现弗兰克回答中的属性:lang=“de de”(或另一种文化)正是我所需要的。Frank的答案应该有更多的投票,因为这是一个有效的解决方案,而且非常简单。德语逗号看起来很好,但是。。你怎么发帖的?因为发布的值应该是特定于区域性的。另外,由于lang属性,我也遇到了无法直接在输入字段上设置属性的问题。。。当您在html标记上设置lang属性时,它也可以工作。我的浏览器(chrome)语言设置为英语,但我希望以德语数字格式在文本输入中显示浮点数。我曾尝试在输入和HTML标记中添加属性lang=“de de”,但无法正常工作。
<input type="text" pattern="[0-9]+([\.][0-9]{1,2})?" name="amount">
<input type="text" pattern="[0-9]+([\.|,][0-9]{1,2})?" name="amount">
<input name="myinput" value="0" step="0.01" lang="de-DE" type="number">
input[type=number] {
    -moz-appearance:textfield;
    -webkit-appearance: none;
    appearance: textfield;
}
<html lang="en">