【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类型的时候是不支持的,下面是一些解决这种问题 ...
随机推荐
- FMC228- 四路16位1.2Gsps DA FMC子卡模块
FMC228- 四路16位1.2Gsps DA FMC子卡模块 一.概述 FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中 ...
- git的HEAD指针操作
学习操作HEAD指针,具体如下: - 查看Git版本信息 - 移动指针 - 通过移动HEAD指针恢复数据 - 合并版本 拓扑图:
- java通过图片URL下载图片
public InputStream getInputStream(String imgUrl) { InputStream inputStream = null; try{ HttpURLConne ...
- Java8 时间处理类的使用实践(LocalDate...)
有了它,谁还在用Date?Calendar? 其实也不能这么绝对,毕竟还没到那个程度上.Java8 新增了处理时间的一组类(LocalDate.LocalDateTime.LocalTime),刚开始 ...
- gbase整合mybatis出现: Cause: java.sql.SQLException: Can't convert to: binary stream
参考地址:http://mybatis-user.963551.n3.nabble.com/Map-SQL-Type-LVARCHAR-x-to-JDBC-Type-VARCHAR-globally- ...
- 装饰器模式-Decerator
一.定义 装饰器模式又叫做包装模式(Wrapper).装饰器模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 在以下情况下应该使用装饰器模式: 1.需要扩展一个类的功能,或给一个类增 ...
- css3 :enabled与:disabled伪类选择器
css :enabled和:disabled伪类选择器 在Web表单中,有些表单元素(如输入框.密码框.复选框等)有“可用”和“不可用”这2种状态.默认情况下,这些表单元素都处在可用状态. 在CSS3 ...
- Git关联JIRA的issue
指导文章 http://www.51testing.com/html/30/n-3724930.html http://{$host_url}/help/user/project/integratio ...
- [POJ1187] 陨石的秘密
问题描述 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石 ...
- 使用vue进行国际化
相对于网站等一些需求 我们有需要做国际化的需求,具体步骤如下: 首先安装 vue-i18n npm install vue-i18n import VueI18n from 'vue-i18n' Vu ...