一、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. Linux架构之Nginx Web基础1

    第41章 Nginx Web基础入门 41.1 Nginx部署 41.1.1 Nginx的安装方式   源码编译 官方仓库 epel仓库 优点 规范 安装简单 安装简单   便于管理 配置易读   缺 ...

  2. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) - B

    题目链接:http://codeforces.com/contest/831/problem/B 题意:给第2个26个字母并不重复的字符串(2个字符串对于一个映射),第1个字符串为key集合,第2个字 ...

  3. java并发学习第五章--线程中的锁

    一.公平锁与非公平锁 线程所谓的公平,就是指的是线程是否按照锁的申请顺序来获取锁,如果是遵守顺序来获取,这就是个公平锁,反之为非公平锁. 非公平锁的优点在于吞吐量大,但是由于其不是遵循申请锁的顺序来获 ...

  4. 自动化测试平台环境docker部署

    参考资料:testin云测 https://www.testin.cn接口自动化测试平台:http://120.79.232.23星云测试 http://www.threadingtest.com腾讯 ...

  5. centos 6.5 安装 subversion

    安装subversion需要依赖apr.apr-util.sqlite,下载安装包,放在/usr/file目录 subversion-1.9.4.tar.gz apr-1.5.2.tar.gz apr ...

  6. spring boot 参数传递(spring boot 参数传数 arg0 每一个参数 arg0#{arg0},arg1 #{arg1})

    spring boot 参数传数 arg0 每一个参数 arg0#{arg0},arg1  #{arg1} @Select("select * from sys_user where nam ...

  7. php对象转数组的函数

    关于php中想让对象以数组的形式访问,这时候就需要使用到get_object_vars()函数了.先来介绍一下这个函数. 官方文档是这样解释的: 1 array get_object_vars ( o ...

  8. php单点登录实现原理实例详解

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点登录在大型网站里使用 ...

  9. shell学习----正则表达式

    在使用sed和gawk时如果能够熟练的使用正则表达式,可以准确的过滤到自己需要的信息 Linux中,有两种流行的正则表达式引擎: POSIX基础正则表达式,BRE引擎 POSIX扩展正则表达式,ERE ...

  10. 最最简单的spring mvc + Maven项目

    首先配置pom文件,只需要引用三个jar包文件即可: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...