zoukankan      html  css  js  c++  java
  • 【Vue 2.X】基于input[type='number']封装parseFloat、parseInt-自定义指令系列(一)

    一、parseFloat

    效果:限制负值输入,且输入值不为空时自动保留两位小数,等同于js的parseFloat(value).toFixed(2)

    使用:与v-model配合使用,v-parseFloat=“v-model绑定值”

     1 Vue.directive('parseFloat', {
     2     bind: function(el, binding, vNode){
     3         el.oInput = el.getElementsByTagName('input')[0]
     4         el.maxNum = binding.arg
     5         el.handlerKeyUp = function(){
     6             if(el.oInput.value){
     7                 let tempArr = String(el.oInput.value).split('.')
     8                 if(tempArr[1] && tempArr.length <= 2 && !isPostNum(el.oInput.value)){
     9                     el.oInput.value = Number(el.oInput.value).toFixed(2)
    10                     vNode.context[binding.expression] = Number(el.oInput.value).toFixed(2)
    11                     return
    12                 }
    13             }
    14             if(!el.oInput.value){
    15                 el.oInput.value = ''
    16                 vNode.context[binding.expression] = ''
    17                 return
    18             }
    19         }
    20         el.handlerBlur = function(){
    21             if(el.oInput.value){
    22                 el.oInput.value = Number(el.oInput.value).toFixed(2)
    23                 vNode.context[binding.expression] = Number(el.oInput.value).toFixed(2)
    24                 return 
    25             } 
    26         }
    27         el.oInput.addEventListener('keyup',el.handlerKeyUp)
    28         el.oInput.addEventListener('blur',el.handlerBlur)
    29     },
    30     unbind:function(el){
    31         el.oInput = el.getElementsByTagName('input')[0]
    32         el.oInput.removeEventListener('keyup', el.handlerKeyUp)
    33         el.oInput.removeEventListener('blur', el.handlerBlur)
    34     }
    35 });
     1 const regFloat = /^(([0]|[1-9][0-9]*)|(([0].d{1,2}|[1-9][0-9]*.d{1,2})))$/ //两位小数
     2 // 判断是否是正数(保留两位小数) minNum最小值 maxNum最大值
     3 function isPostNum(value, minNum, maxNum){
     4     const minVal = minNum || ''
     5     const maxVal = maxNum || ''
     6     if(!regFloat.test(value)){
     7       return false
     8     }
     9     if(minVal && value < minVal){
    10       return false
    11     }
    12     if(maxNum && value > maxVal){
    13       return false
    14     }
    15     return true
    16 }

    二、parseInt

    效果:限制负值输入,且输入值不为空时自动保留整数,等同于js的parseInt(value)

    使用:与v-model配合使用,v-parseFloat=“v-model绑定值”

     1 Vue.directive('int', {
     2     bind: function(el, binding, vNode){
     3         el.oInput = el.getElementsByTagName('input')[0]
     4         el.maxNum = binding.arg
     5         el.handlerKeyUp = function(){
     6             if(!isNum(el.oInput.value)){
     7                 el.oInput.value = ''
     8                 vNode.context[binding.expression] = ''
     9                 return
    10             }
    11             if(el.oInput.value){
    12                 el.oInput.value = parseInt(el.oInput.value)
    13                 vNode.context[binding.expression] = parseInt(el.oInput.value)
    14                 return
    15             }
    16             if(!el.oInput.value){
    17                 el.oInput.value = ''
    18                 vNode.context[binding.expression] = ''
    19                 return
    20             }
    21         }
    22         el.handlerBlur = function(){
    23             if(el.oInput.value){
    24                 el.oInput.value = parseInt(el.oInput.value)
    25                 vNode.context[binding.expression] =parseInt(el.oInput.value)
    26                 return 
    27             } 
    28         }
    29         el.oInput.addEventListener('keyup',el.handlerKeyUp)
    30         el.oInput.addEventListener('blur',el.handlerBlur)
    31     },
    32     unbind:function(el){
    33         el.oInput = el.getElementsByTagName('input')[0]
    34         el.oInput.removeEventListener('keyup', el.handlerKeyUp)
    35         el.oInput.removeEventListener('blur', el.handlerBlur)
    36     }
    37 });
  • 相关阅读:
    图论————最短路,最小生成树。
    复习KMP
    P3930 SAC E#1
    P3818 小A和uim之大逃离 II
    洛谷P3928 SAC E#1
    洛谷-P3927 SAC E#1
    求逆欧拉函数(arc)
    《公式证明:欧拉函数》
    求一个极大数的欧拉函数 phi(i)
    仙人掌(cactus)
  • 原文地址:https://www.cnblogs.com/ylhssn/p/12035193.html
Copyright © 2011-2022 走看看