el-input 限制数字,保留两位小数

 <script>代码为

Vue.directive("change-num",{
      bind:(el,binding,vnode)=>{
          let input = vnode.elm.children[0];
          input.addEventListener('compositionstart', () => {
             vnode.inputLocking = true
          })
          input.addEventListener('compositionend', () => {
            vnode.inputLocking = false
            input.dispatchEvent(new Event('input'))
          })
         input.addEventListener('input', () => {
           if(vnode.inputLocking) {
              return;
           }
         let oldValue = input.value;
         let newValue = input.value;
         newValue = newValue.replace(/[^\d.]/g, '');
         newValue = newValue.replace(/^\./g, '');
         newValue = newValue.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');
         newValue = newValue.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
         if(newValue) {
           let arr = newValue.split('.')
           // 去掉开头多余的0
           newValue = Number(arr[0]) + (arr[1] === undefined ? '' : '.' + arr[1]) 
         } 
         // 判断是否需要更新,避免进入死循环
         if(newValue !== oldValue) {
           input.value = newValue
           input.dispatchEvent(new Event('input')) // 通知v-model更新
         }
     })
     // input 事件无法处理小数点后面全是零的情况 因为无法确定用户输入的0是否真的应该清除,如3.02。放在blur中去处理
     input.addEventListener('blur', () => {
          let oldValue = input.value;
          let newValue = input.value;
          if(newValue) {
             newValue = Number(newValue).toString()
          }
          // 判断是否需要更新,避免进入死循环
          if(newValue !== oldValue) {
             input.value = newValue
             input.dispatchEvent(new Event('input')) // 通知v-model更新
          }
      })
  }
});

 使用Vue.js的自定义指令,在el-input 中直接调用v-change-num,如v-if

<el-col :span="8">
     <el-form-item label="参数" prop="param" :rules="[{ required: false, message: '必填,不能为空'}]">
         <el-input v-model="beanForm.param" clearable v-change-num placeholder="" class="el_in_width"></el-input>
     </el-form-item>
</el-col>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值