【Vue 2.X】基于input[type='number']封装parseFloat、parseInt-自定义指令系列(一)
一、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-自定义指令系列(一)的更多相关文章
- 【Vue 2.X】基于ElementUI 实现 dialog弹窗移动效果-自定义指令系列(二)
v-dialogDrag: 弹窗拖拽 使用: <el-dialog XXX v-dialogDrag></el-dialog> Vue.directive('dialogDra ...
- 加减号改变input[type=number]的数值,基于[zepto.js]
通过点击加减号可以更改input的数值,样式如下图: 具体的html代码如下: <div class="xh-lxx-cart-count1"> <span cl ...
- 【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)
在Vue中的项目,基于VUX-UI开发,一个常见的需求: 1.金额输入框 2.弹出数字键盘 3.仅支持输入两位小数,限制最大11位数,不允许0开头 后续:与UI沟通后, 思路调整为限制输入,并减少正则 ...
- 动手写个数字输入框1:input[type=number]的遗憾
前言 最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方.本系列打算分4篇来叙述这段可歌可泣的踩坑经历: <动手写个数字输入框1:input[type=nu ...
- input type='number'时,maxlength属性无效
<input type="number" oninput="if(value.length>11)value=value.slice(0,11)" ...
- 去掉 input type="number" 右边图标
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 去除input[type=number]最右边的spinners(默认加减符号)
// 去掉input[type=number]默认的加减号 input[type='number'] { -moz-appearance:textfield; } input[type=number] ...
- input[type=number]问题
有时候对于只能输入数字的表单会有想要写成input[type=number]但是其中有一个问题 <input type="text" name="code" ...
- 限制input[type=number]的输入位数策略整理
当我们使用类型number的input输入框的时候,我们可能需要限制输入的位数,这个时候通常会想到maxlength,但是maxlength是在number类型的时候是不支持的,下面是一些解决这种问题 ...
随机推荐
- CentOS7 systemctl 命令
*启动.重启.停止.重载服务 # systemctl start httpd.service # systemctl restart httpd.service # systemctl stop ht ...
- 使用Node,Vue和ElasticSearch构建实时搜索引擎
(译者注:相关阅读:node.js,vue.js,Elasticsearch) 介绍 Elasticsearch是一个分布式的RESTful搜索和分析引擎,能够解决越来越多的用例. Elasticse ...
- 用于DataLoader的pytorch数据集
暂时介绍 image-mask型数据集, 以人手分割数据集 EGTEA Gaze+ 为例. 准备数据文件夹 需要将Image和Mask分开存放, 对应文件的文件名必须保持一致. 提醒: Mask 图像 ...
- [POJ1187] 陨石的秘密
问题描述 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石 ...
- python学习笔记(九)内置函数
print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 True print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 True print( ...
- C语言 为什么要引入指针?
https://blog.csdn.net/chengxuyuan997/article/details/81231679 正文 在说为什么引入指针这个问题前先带大家了解一下什么是指针? 指针最为简短 ...
- BZOJ 1112: [POI2008]砖块Klo Splay + 性质分析
Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...
- mac的jvm调优工具
安装好JDK之后调优工具所在位置为: /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jvisualvm j ...
- [WCF REST] WebServiceHost 不依赖配置文件启动简单服务
最近用WPF启动 WCF REST 服务,发现app.config 配置好烦,简单一个exe 可以到处搬动,还非得带一个累赘配置,不小心丢了程序就跑不起来. 最后决定,砍去WCF配置项,用WebSer ...
- mysql_DML_select_子查询
-------------------------------------------------------------------子查询--------------------- --1.子查 ...