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 });
  • 相关阅读:
    图片和xml文件的转换
    WPF的样式(Style)继承
    .NET的序列化和反序列化
    WPF中的画板InkCanvas
    找到网页的源文件并找到歌曲文件的路径
    How to check if a ctrl + enter is pressed on a control?
    计算两个日期相差的天数
    图片保存到数据库以及从数据库中Load图片
    设计模式Command(命令模式)
    一个强大而且好用的UML设计工具
  • 原文地址:https://www.cnblogs.com/ylhssn/p/12035193.html
Copyright © 2011-2022 走看看