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创建.
您可以查看几个额外的属性,包括valueAsNumber.
Chrome会根据输入类型尝试为您提供最佳输入法.在这种情况下,数字也有一些额外的能力,如向上和向下切换.
重点是,如果数字无效,您将能够检测到错误并设置样式 input[type=number]:invalid { background-color: red; }
你可以试试......
<input type="text" pattern="[0-9]*" value="123456" />
这将强制在桌面和iPhone上的Firefox 4上输入0-9; 我手头没有Chrome可以尝试,但它也应该这样做.