1.wxml
<input maxlength="8" type="digit" data-id="monthIncome" model:value="{{monthIncome}}" placeholder="请输入月均收入"
placeholder-class="phClass" bindinput="matchAmount" />
2.js
//金额输入只允许两位小数
matchAmount(event) {
let value = event.detail.value
let { id } = event.currentTarget.dataset
value = value.replace(/[^\d^\.]+/g, '')
value = value.replace(/^0+(\d)/, '$1')
value = value.replace(/^\./, '0.')
value = value.match(/^\d*(\.?\d{0,2})/g)[0] || ''
return value
}
3.问题
安卓上没问题,能吊起数字键盘,ios自带输入法也没有问题
问题出在安装了第三方输入法的ios上,我使用的是讯飞输入法,我可以切换到汉字输入,并且可以输入汉字,我使用打印看到return返回空,但是页面上任然是汉字,提交也校验不出来非数字,表单校验使用 WxValidate 插件
monthIncome: { required: '请输入月均收入', digit: '月均收入格式错误' },
4.解决
使用setData重复设置一次
matchAmount(event) {
let value = event.detail.value
let { id } = event.currentTarget.dataset
value = value.replace(/[^\d^\.]+/g, '')
value = value.replace(/^0+(\d)/, '$1')
value = value.replace(/^\./, '0.')
value = value.match(/^\d*(\.?\d{0,2})/g)[0] || ''
this.setData({
[id]: value
}, () => {
return value
})
},