一、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. nginx的RPM包制作案例

    使用nginx-1.12.2版本的源码软件,生成对应的RPM包软件,具体如下: - 软件名称为nginx - 软件版本为1.12.2 - RPM软件包可以查询描述信息 - RPM软件包可以安装及卸载 ...

  2. 05XML

    1.XML入门 1.1 引入 HTML, 超文本标记语言. html语言语法是很松散的! 1)标签不区分大小写的! 2)标签可以不匹配的. 由w3c组织,针对html的语法缺陷,去设计了另一门,叫xm ...

  3. [CQOI2015]网络吞吐量(网络流+SPFA)

    [CQOI2015]网络吞吐量 题目描述 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最快的到达目的 ...

  4. Java实现代理服务器

    Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务器即是Web服务器又是Web客户端. 代理服务器 ...

  5. Codeforces 512B: Fox And Jumping

    题目链接 题意说的是,有n种卡片,使用第i种卡片可以使当前自己在数轴上的位置移动 l[i],要获得使用第i种卡片的代价是 c[i],求能使自己移动到数轴上任意位置的最小代价,如果不可能则输出-1 当前 ...

  6. python学习笔记(八)函数return多个值,列表推导式和交换两个变量的值

    函数return多个值: 补充知识点:写代码得到时候少用全局变量: 1.不安全 2.会一直占着内存不释放 函数多个return值,那么会把这几个return的值都放在一个元组里面,然后返回 def h ...

  7. POJ 2502 Subway ( 最短路 && 最短路建图 )

    题意 : 给出二维平面上的两个点代表起点以及终点,接下来给出若干条地铁线路,除了在地铁线路上行进的速度为 40km/h 其余的点到点间都只能用过步行且其速度为 10km/h ,现问你从起点到终点的最短 ...

  8. div页面布局基本布局知识

    页面代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  9. 动态规划 List

    例题 #A 传纸条(Accepted)    #B 乘积最大 (Unaccepted)    #C 石子合并 (Accepted)    #D 加分二叉树 (Unaccepted)    #E 没有上 ...

  10. vue中操作Dom节点的方法

    1.vue中ref操作dom节点 <template> <div id="app"> <div </div> <button @cl ...