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)
}

操作步骤:

  1. 输入数字超过max设定最大值,value会变更为max最大值
  2. 继续输入超过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

3 回复

这个问题一直是这样- -。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 的数据响应式机制,视图可能不会立即更新。

解决方案:

  1. 使用 $setVue.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);
        }
    }
    
  2. 使用 v-model 替代 :value 绑定:

    <input [@input](/user/input)="inputArea" 
           :data-max="cropProduct.maxArea" 
           name="area" 
           type="number" 
           v-model="cropProduct.area" 
           placeholder="请输入定植面积">
    
  3. 优化事件处理方法:

    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();
        }
    }
回到顶部