uniapp编译小程序监听input的input事件无法实时修改data数据/输入金额限制小数点后2位正则

前言:input设监听事件,修改data中的v-model绑定的值不生效/不实时更新.

提示:以下是本篇文章正文内容,下面案例可供参考

一、支付宝小程序解决?

controlled 属性必加

<input v-model="number" controlled  @input="changeNumber" />
data() {
	return {
		number: "",
		}
	},
methods: {
changeNumber(e) {
	let value = e.target.value;
	//以下正则为
			//限制输入为数字,
			//限制仅可输入小数点后两位,
			//清除"数字"和"."以外的字符,
			//如果没有小数点,首位不能为类似于 01、02的金额  
	value = value.replace(/[^\d.]/g, "");   
	value = value.replace(/\.{2,}/g, ".");  
	value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
	value = value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); 
	if (value.indexOf(".") < 0 && value != "") { 
		value = parseFloat(value);
	}
	this.number = value;
	},
}

二、以上代码完美解决支付宝小程序,但是编译 到微信时又不生效了,

代码如下(示例):

<input v-model="number"  @input="changeNumber" />  //controlled  可不加

changeNumber(e) {
let value = e.target.value;
	//...
		//限制条件
	// ...
	// 兼容微信异步更新input值 setTimeout 和this.$nextTick方法二选一
	setTimeout(() => { this.number = value }, 0)
	// this.$nextTick(function () {this.number  = value})
},

# 总结 提示:假如你只编译支付宝小程序 ,第一种方法即可,假如需要适配多端,可参考第二种方法,代码如有不正望指出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值