Chrome自动格式化输入=数字

Don*_*ide 70 html5 google-chrome input

我有一个Web应用程序,我使用HTML5属性type ="number"将输入字段指定为数字.

<input type="number" value="123456" />
Run Code Online (Sandbox Code Playgroud)

通过指定类型,Chrome会自动将值格式化为包含逗号(123,456).在其他浏览器中,它不会格式化数字,但也不会阻止非数字字符.

在这种情况下,我不希望添加逗号.有没有办法关闭本地化格式?

arc*_*ain 92

这是因为与numberChromium中的HTML5 输入类型相关联的行为,并且您绝对不是唯一不关心它的人.

我过去通过使用text类型解决了这个问题.例如,这一点运行良好(刚刚在Chrome 11.0.696.71中测试过):

<input type="text" 
       placeholder="Enter Text" 
       name="inputName" 
       pattern="[0-9]*">
Run Code Online (Sandbox Code Playgroud)

number类型的这种行为(至少对我而言)肯定是一个错误,因为HTML5标准指定number在格式化显示时应具有以下值:

给定数字输入,将数字转换为字符串的算法如下:返回表示输入的有效浮点数.

标准在这里定义了一个"有效浮点数" ,据我所知,包括分组字符是不可取的.


更新

我已将问题与WebKit的内容中的以下代码隔离开来.我已经包含了修复此问题的行:

// From LocalizedNumberICU.cpp
String formatLocalizedNumber(double number, unsigned fractionDigits)
{
    NumberFormat* formatter = numberFormatter();
    if (!formatter)
        return String();
    UnicodeString result;
    formatter->setMaximumFractionDigits(clampToInteger(fractionDigits));
    formatter->setGroupingUsed(FALSE); // added this line to fix the problem
    formatter->format(number, result);
    return String(result.getBuffer(), result.length());
}
Run Code Online (Sandbox Code Playgroud)

我下周正在度假,但是当我回来时,我计划将这个补丁提交给WebKit团队.一旦他们(希望)接受补丁,Chromium应该将其作为正常刷新过程的一部分.


你可以看到原来的代码在这里,该补丁的版本在这里,和原文件的差异和补丁的文件在这里.最后的补丁由Shinya Kawanaka创建.

  • +1不仅可以回答问题,还可以花时间实际修复导致错误的软件! (28认同)
  • @ njak32同意.不得不在Chrome中避免"数字"是一种痛苦; 希望这个问题得到迅速解决. (3认同)

Kin*_*lan 5

您可以查看几个额外的属性,包括valueAsNumber.

Chrome会根据输入类型尝试为您提供最佳输入法.在这种情况下,数字也有一些额外的能力,如向上和向下切换.

重点是,如果数字无效,您将能够检测到错误并设置样式 input[type=number]:invalid { background-color: red; }


gdt*_*gdt 5

你可以试试......

<input type="text" pattern="[0-9]*" value="123456" />

这将强制在桌面和iPhone上的Firefox 4上输入0-9; 我手头没有Chrome可以尝试,但它也应该这样做.