uni-app input 绑定的value值更新问题,第一次绑定值会变更为设定最大值,但持续录入数据后value不再更新
uni-app input 绑定的value值更新问题,第一次绑定值会变更为设定最大值,但持续录入数据后value不再更新
示例代码:
<input @input="inputArea" :data-max="cropProduct.maxArea" name="area" type="number" :value="cropProduct.area" placeholder="请输入定植面积">
@input事件代码:
```javascript
inputArea(e){
var area = Number.parseFloat(e.target.value);
var maxArea = Number.parseFloat(this.cropProduct.maxArea);
console.log(area,maxArea)
console.log(area>maxArea)
this.cropProduct.area='';
if(area>maxArea){
this.cropProduct.area=maxArea;
}else{
this.cropProduct.area = e.target.value
}
console.log(this.cropProduct.area)
}
操作步骤:
- 输入数字超过max设定最大值,value会变更为max最大值
- 继续输入超过max数字,input执行代码正确执行,但界面中的value不刷新。
预期结果:
输入的数字大于设定最大值时,value设定为max的值。
实际结果:
第一次value刷新,继续录入不刷新
bug描述:
需求是这样的:input事件监听值改变时,如果输入值大于限定最大值要更新为最大值。 问题:第一次执行是正确的,输入值超过最大设定值value会变更为最大值,但如果继续录入数字超过设定最大值时,界面上的value不再刷新,而cropProduct.area是正确变更了的。
附件:
| 信息类型 | 信息内容 |
|---|---|
| 开发环境 | Windows |
| 操作系统版本 | win7 |
| 第三方开发者工具版本 | 1.05.2109101 |
| 基础库版本 | 2.19.5 |
| 项目创建方式 | CLI |
| CLI版本 | 3.2.8.20210923-alpha |
更多关于uni-app input 绑定的value值更新问题,第一次绑定值会变更为设定最大值,但持续录入数据后value不再更新的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题一直是这样- -。nvue也是这样,,不能及时更新,不过可以绕开,你可以试试下面这个代码
input(e){
if(e.detail.value > 10){
this.tiNumber = 2;
setTimeout(()=>{
this.tiNumber = 10;
},1);
}
}
更多关于uni-app input 绑定的value值更新问题,第一次绑定值会变更为设定最大值,但持续录入数据后value不再更新的实战教程也可以访问 https://www.itying.com/category-93-b0.html
谢谢,用延时的确可以变相的解决这个问题。
这个问题是由于 uni-app 中 input 组件的值绑定机制导致的。当你在 inputArea 方法中直接修改 this.cropProduct.area 时,由于 uni-app 的数据响应式机制,视图可能不会立即更新。
解决方案:
-
使用
$set或Vue.set确保响应式更新:inputArea(e) { let area = parseFloat(e.target.value); let maxArea = parseFloat(this.cropProduct.maxArea); if (area > maxArea) { this.$set(this.cropProduct, 'area', maxArea); } else { this.$set(this.cropProduct, 'area', e.target.value); } } -
使用
v-model替代:value绑定:<input [@input](/user/input)="inputArea" :data-max="cropProduct.maxArea" name="area" type="number" v-model="cropProduct.area" placeholder="请输入定植面积"> -
优化事件处理方法:
inputArea(e) { let value = e.target.value; let maxArea = parseFloat(this.cropProduct.maxArea); // 处理空值情况 if (value === '' || isNaN(value)) { this.$set(this.cropProduct, 'area', ''); return; } let area = parseFloat(value); // 如果输入值超过最大值,设置为最大值 if (area > maxArea) { this.$set(this.cropProduct, 'area', maxArea.toString()); // 强制更新视图 this.$forceUpdate(); } }

