el-input-number组件无法触发change事件,实时校验失效的解决办法

el-input-number组件的坑

el-input-number 组件输入时,只有失去焦点才会触发change事件,导致输入时无法实时校验。

解决方案

使用input事件,实时监听输入框的输入值。上代码

<el-input-number
  ref="operationScore"
  v-model="form.operationScore"
  :precision="0"
  :min="1"
  :max="9999"
  style="width:100%"
  @input.native="operationScoreChange"
/>

这样虽然能实时获取输入值,但是获取到的值并不是最后一次输入的值。假如键入值152,此时v-mdel绑定的值却是15,也就是上一次的值。导致校验出现问题。
校验代码

data () {
    // 扣分校验
    const checkScore = (rule, value, callback) => {
      if (this.form.operationType == 0) {
        if (Number(value) > this.form.score) {
          return callback(new Error(this.$t('page.points.must.greater')))
        }
      }
      callback()
    }
    return {
      params: {},
      gridUrl: '',
      rules: {
        operationScore: [
          { required: true, message: this.$t('lang.pleaseInput'), trigger: ['blur'] },
          { validator: checkScore, trigger: ['blur'] }
        ]
      }
    }
  }

我的解决方案:input事件中获取最近的值,赋值给v-mdel绑定的值,再触发校验。

operationScoreChange () {
    this.form.operationScore = this.$refs.operationScore.displayValue
     this.$refs.form.validateField('operationScore')
   }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值