企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# type=number ## type=number在PC端 和type=text没有多少区别,区别仅在不同浏览器会有不同的表现样式,后面又是会多出上下增加的按键,但这个没有多大意义,因为不统一,且UI巨丑。所以在PC端还是不要使用者number的玩意。 ## type=number在移动端 作用体现在:输入框focus后,弹出的键盘是数字键盘,方便用户输入数字,但是在Webkit内核的浏览器中有一些隐藏的问题。 移动端type=number的输入框用户仍然可以输入汉字和字母,但是在W3C规范中:如果输入了一些非数字的字符,则会返回空字符串,明明输入了,但却.value获取不到值。 这个事情非常坑,会导致验证的时候如果输入非数字的时候,直接$input.value( 或者$('.selector').val() )拿不到值,而拿不到值的情况下会认为没有填写,如果你页面上的一个框,要求格式须填数字格式,而又不是必填的,设置成number就会导致验证逻辑不正常。 chrome中, 在.validity.badInput这个属性里,可以判断值是否正常,如果填入了非正常值,这个属性就是true,正常值的话就是false。 但是火狐下.validity里没有badInput属性,它直接.value可以正常返回非数字的字符串。 IE8、9也可以直接.value获取到非数字的字符串值,不会返回空字符串。 我又想弹出的键盘是数字键盘,又想不能输入非数字的字符,又想获取到input的值对其进行处理,这种终极需求如何解决?网上的答案无法同时满足这三个需求。 解决思路: 1. 键盘是数字键盘:输入框在focus时type必须为number 2. 获取输入框的值:输入框在input时或者keypress或者keydown或者keyup时type不能是number,比如将type临时变为text 3. input时,将type改成text,就可以拿到值,