15 June 2017
兼容安卓、IOS的纯数字键盘输入方案
需求点:
开发中很小的一个问题,纯当吐槽记の。
1、调起系统的数字键盘。2、只接受0-9的数字输入。3、限制输入长度是18。
踩在前面的坑:提到纯数字输入,自然而然的反应就是number类型的input控件,但它在IOS下并不能调起数字键盘。
于是又想到了pattern
属性,加了pattern="\d*"
之后(PS:\d{18}不OK),安卓、IOS都能正常拉起数字键盘了,但是问题又来了,安卓下的数字键盘是带运算符(+、-、.)的,因为这几个符号(包括e)属于数字范畴。
o(︶︿︶)o。。。不能限制它不现实运算符,但我能去清掉你们吧,清掉的方法其实很简单onkeypress="if(event.keyCode < 48 || event.keyCode > 56) event.returnValue = false;"
PC下效果完美,然而安卓和IOS表现各异,安卓下不触发keypress,IOS不触发keyup,且安卓下的keyup也不能禁止运算符的输入。
最后,看了下别人的手机充值代码,用了tel类型,代替number+pattern调起数字键盘,至于禁止前面说的运算符,监听keyup事件去掉非数字字符就可以了,我用的是vue,这步放在watch里面。
watch: {
id: function(val, old) {
if (old !== val) {
this.id = this.getNum(val)
}
}
},
methods: {
getNum(value) {
return this.$util.trim(value).replace(/[^\d]/g, '')
}
}
开发中很小的一个问题,纯当吐槽记の。