【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类型的时候是不支持的,下面是一些解决这种问题 ...
随机推荐
- nginx的RPM包制作案例
使用nginx-1.12.2版本的源码软件,生成对应的RPM包软件,具体如下: - 软件名称为nginx - 软件版本为1.12.2 - RPM软件包可以查询描述信息 - RPM软件包可以安装及卸载 ...
- 05XML
1.XML入门 1.1 引入 HTML, 超文本标记语言. html语言语法是很松散的! 1)标签不区分大小写的! 2)标签可以不匹配的. 由w3c组织,针对html的语法缺陷,去设计了另一门,叫xm ...
- [CQOI2015]网络吞吐量(网络流+SPFA)
[CQOI2015]网络吞吐量 题目描述 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最快的到达目的 ...
- Java实现代理服务器
Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务器即是Web服务器又是Web客户端. 代理服务器 ...
- Codeforces 512B: Fox And Jumping
题目链接 题意说的是,有n种卡片,使用第i种卡片可以使当前自己在数轴上的位置移动 l[i],要获得使用第i种卡片的代价是 c[i],求能使自己移动到数轴上任意位置的最小代价,如果不可能则输出-1 当前 ...
- python学习笔记(八)函数return多个值,列表推导式和交换两个变量的值
函数return多个值: 补充知识点:写代码得到时候少用全局变量: 1.不安全 2.会一直占着内存不释放 函数多个return值,那么会把这几个return的值都放在一个元组里面,然后返回 def h ...
- POJ 2502 Subway ( 最短路 && 最短路建图 )
题意 : 给出二维平面上的两个点代表起点以及终点,接下来给出若干条地铁线路,除了在地铁线路上行进的速度为 40km/h 其余的点到点间都只能用过步行且其速度为 10km/h ,现问你从起点到终点的最短 ...
- div页面布局基本布局知识
页面代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 动态规划 List
例题 #A 传纸条(Accepted) #B 乘积最大 (Unaccepted) #C 石子合并 (Accepted) #D 加分二叉树 (Unaccepted) #E 没有上 ...
- vue中操作Dom节点的方法
1.vue中ref操作dom节点 <template> <div id="app"> <div </div> <button @cl ...