【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 });
原文地址:https://www.cnblogs.com/ylhssn/p/12035193.html