This is my personal blog where I share a lot of stuffs about my life and work
everything i do in between.

兼容安卓、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, '')
		}
	}
	

开发中很小的一个问题,纯当吐槽记の。