input type=number的兼容性问题

今天遇到一个看似很普通的bug,在某几个页面的输入框里输入小数,当输入小数点的时候validator会报错。

本以为是个超级简单的问题,也许是validator的验证函数忽略了小数的情况吧。结果发现在chrome下并没有出现同样的问题,于是引出了一个隐蔽的兼容性问题。

当前我们的form validator会在每个输入动作之后检查输入值,然后实时给出反馈。这个bug一定出现在输入了小数点之后,比如输入"5."之后报错。经过一系列测试,"5."在chrome中能被querySelector正确选择出来,而在Firefox下的querySelctor的返回值却为空字符串。

于是google了一番,发现各个浏览器对如何界定小数的分隔符并不统一。对chrome来说"5."是个合法的小数,而对Firefox来说这是个非法小数。当前较好的解决办法是在input中加入lang选项来明确指出分隔符的定义。我加入lang="en"来指明"."是小数的分隔符。经测试后问题顺利解决,顺便测试了法国常用的小数点分隔符",",也可以在lang="en"时正常辨认。

做了一个code的简单例子,可以用chrome和Firefox分别测试观察:codepen.io

测试平台:
Chrome: Version 43.0.2357.130 Ubuntu 15.04 (64-bit)
Firefox: 42.0a2 (2015-08-16)

你可能感兴趣的:(input type=number的兼容性问题)