一、parseFloat

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

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

 Vue.directive('parseFloat', {
bind: function(el, binding, vNode){
el.oInput = el.getElementsByTagName('input')[0]
el.maxNum = binding.arg
el.handlerKeyUp = function(){
if(el.oInput.value){
let tempArr = String(el.oInput.value).split('.')
if(tempArr[1] && tempArr.length <= 2 && !isPostNum(el.oInput.value)){
el.oInput.value = Number(el.oInput.value).toFixed(2)
vNode.context[binding.expression] = Number(el.oInput.value).toFixed(2)
return
}
}
if(!el.oInput.value){
el.oInput.value = ''
vNode.context[binding.expression] = ''
return
}
}
el.handlerBlur = function(){
if(el.oInput.value){
el.oInput.value = Number(el.oInput.value).toFixed(2)
vNode.context[binding.expression] = Number(el.oInput.value).toFixed(2)
return
}
}
el.oInput.addEventListener('keyup',el.handlerKeyUp)
el.oInput.addEventListener('blur',el.handlerBlur)
},
unbind:function(el){
el.oInput = el.getElementsByTagName('input')[0]
el.oInput.removeEventListener('keyup', el.handlerKeyUp)
el.oInput.removeEventListener('blur', el.handlerBlur)
}
});
 const regFloat = /^(([0]|[1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/ //两位小数
// 判断是否是正数(保留两位小数) minNum最小值 maxNum最大值
function isPostNum(value, minNum, maxNum){
const minVal = minNum || ''
const maxVal = maxNum || ''
if(!regFloat.test(value)){
return false
}
if(minVal && value < minVal){
return false
}
if(maxNum && value > maxVal){
return false
}
return true
}

二、parseInt

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

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

 Vue.directive('int', {
bind: function(el, binding, vNode){
el.oInput = el.getElementsByTagName('input')[0]
el.maxNum = binding.arg
el.handlerKeyUp = function(){
if(!isNum(el.oInput.value)){
el.oInput.value = ''
vNode.context[binding.expression] = ''
return
}
if(el.oInput.value){
el.oInput.value = parseInt(el.oInput.value)
vNode.context[binding.expression] = parseInt(el.oInput.value)
return
}
if(!el.oInput.value){
el.oInput.value = ''
vNode.context[binding.expression] = ''
return
}
}
el.handlerBlur = function(){
if(el.oInput.value){
el.oInput.value = parseInt(el.oInput.value)
vNode.context[binding.expression] =parseInt(el.oInput.value)
return
}
}
el.oInput.addEventListener('keyup',el.handlerKeyUp)
el.oInput.addEventListener('blur',el.handlerBlur)
},
unbind:function(el){
el.oInput = el.getElementsByTagName('input')[0]
el.oInput.removeEventListener('keyup', el.handlerKeyUp)
el.oInput.removeEventListener('blur', el.handlerBlur)
}
});

【Vue 2.X】基于input[type='number']封装parseFloat、parseInt-自定义指令系列(一)的更多相关文章

  1. 【Vue 2.X】基于ElementUI 实现 dialog弹窗移动效果-自定义指令系列(二)

    v-dialogDrag: 弹窗拖拽 使用: <el-dialog XXX v-dialogDrag></el-dialog> Vue.directive('dialogDra ...

  2. 加减号改变input[type=number]的数值,基于[zepto.js]

    通过点击加减号可以更改input的数值,样式如下图: 具体的html代码如下: <div class="xh-lxx-cart-count1"> <span cl ...

  3. 【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)

    在Vue中的项目,基于VUX-UI开发,一个常见的需求: 1.金额输入框 2.弹出数字键盘 3.仅支持输入两位小数,限制最大11位数,不允许0开头 后续:与UI沟通后, 思路调整为限制输入,并减少正则 ...

  4. 动手写个数字输入框1:input[type=number]的遗憾

    前言  最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方.本系列打算分4篇来叙述这段可歌可泣的踩坑经历: <动手写个数字输入框1:input[type=nu ...

  5. input type='number'时,maxlength属性无效

    <input type="number" oninput="if(value.length>11)value=value.slice(0,11)"  ...

  6. 去掉 input type="number" 右边图标

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 去除input[type=number]最右边的spinners(默认加减符号)

    // 去掉input[type=number]默认的加减号 input[type='number'] { -moz-appearance:textfield; } input[type=number] ...

  8. input[type=number]问题

    有时候对于只能输入数字的表单会有想要写成input[type=number]但是其中有一个问题 <input type="text" name="code" ...

  9. 限制input[type=number]的输入位数策略整理

    当我们使用类型number的input输入框的时候,我们可能需要限制输入的位数,这个时候通常会想到maxlength,但是maxlength是在number类型的时候是不支持的,下面是一些解决这种问题 ...

随机推荐

  1. python面向对象--类的内置函数

    #isinstance(obj,cls)判断obj是否是类cls的实例 #issubclass(cls,cls1)判断cls是否是cls1的子类或派生类 class Foo: pass class B ...

  2. POJ 3889 Fractal Streets(逼近模拟)

    $ POJ~3889~Fractal~Streets $(模拟) $ solution: $ 这是一道淳朴的模拟题,最近发现这种题目总是可以用逼近法,就再来练练手吧. 首先对于每个编号我们可以用逼近法 ...

  3. Java类加载器初识

    类加载器基本概念 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java虚拟机使用Java类的方式如下:Java 源程序(.java 文件)在经过 Jav ...

  4. 关于Reporting Services网站

    1.http://www.c-sharpcorner.com/search/sql%20server%20reporting%20services 2.https://msdn.microsoft.c ...

  5. 音悦台 api分析

    用户订阅MV更新 http://uapi.yinyuetai.com/i/flw/subscribe-video-list?page=1&pageSize=200&uid=XXXXXX ...

  6. Why is HttpContext.Current null during the Session_End event?

    Why is HttpContext.Current null during the Session_End event? On Session_End there is no communicati ...

  7. hypermesh生成MNF柔性体

    软件HyperworksX 2019: 该版本默认的是optistruct模板 1.导入几何→分网→材料定义(注意单位,建议统一mks单位制)→定义单元属性→创建刚性单元: 2.创建load coll ...

  8. zabbix 接入钉钉机器人报警

    import requests import json import sys import os headers = {'Content-Type': 'application/json;charse ...

  9. 【GIS数据格式】ArcInfo Binary Grid Format

    最近在修改项目时发现有些提取的坡度数据在参与了下一步计算后会出错,仔细跟了代码之后发现AE生成的坡度数据和其他一些分析后的栅格都被存储为.adf文件.说起惭愧,并不了解这是什么数据,由于下层算法使用G ...

  10. linux常用命令之文档

     不常用,经常就会遗忘,mygod,不用则退化... 目录管理命令 ls:列出指定目录下的内容格式:ls [OPTION]... [FILE]... -a:显示所有文件包括隐藏文件 -A:显示除.和. ...