前言: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})
},
# 总结 提示:假如你只编译支付宝小程序 ,第一种方法即可,假如需要适配多端,可参考第二种方法,代码如有不正望指出。