一、parseFloat

效果:限制负值输入,且输入值不为空时自动保留两位小数,等同于js的parseFloat(value).toFixed(2)

使用:与v-model配合使用,v-parseFloat=“v-model绑定值”

  1. Vue.directive('parseFloat', {
  2. bind: function(el, binding, vNode){
  3. el.oInput = el.getElementsByTagName('input')[0]
  4. el.maxNum = binding.arg
  5. el.handlerKeyUp = function(){
  6. if(el.oInput.value){
  7. let tempArr = String(el.oInput.value).split('.')
  8. if(tempArr[1] && tempArr.length <= 2 && !isPostNum(el.oInput.value)){
  9. el.oInput.value = Number(el.oInput.value).toFixed(2)
  10. vNode.context[binding.expression] = Number(el.oInput.value).toFixed(2)
  11. return
  12. }
  13. }
  14. if(!el.oInput.value){
  15. el.oInput.value = ''
  16. vNode.context[binding.expression] = ''
  17. return
  18. }
  19. }
  20. el.handlerBlur = function(){
  21. if(el.oInput.value){
  22. el.oInput.value = Number(el.oInput.value).toFixed(2)
  23. vNode.context[binding.expression] = Number(el.oInput.value).toFixed(2)
  24. return
  25. }
  26. }
  27. el.oInput.addEventListener('keyup',el.handlerKeyUp)
  28. el.oInput.addEventListener('blur',el.handlerBlur)
  29. },
  30. unbind:function(el){
  31. el.oInput = el.getElementsByTagName('input')[0]
  32. el.oInput.removeEventListener('keyup', el.handlerKeyUp)
  33. el.oInput.removeEventListener('blur', el.handlerBlur)
  34. }
  35. });
  1. const regFloat = /^(([0]|[1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/ //两位小数
  2. // 判断是否是正数(保留两位小数) minNum最小值 maxNum最大值
  3. function isPostNum(value, minNum, maxNum){
  4. const minVal = minNum || ''
  5. const maxVal = maxNum || ''
  6. if(!regFloat.test(value)){
  7. return false
  8. }
  9. if(minVal && value < minVal){
  10. return false
  11. }
  12. if(maxNum && value > maxVal){
  13. return false
  14. }
  15. return true
  16. }

二、parseInt

效果:限制负值输入,且输入值不为空时自动保留整数,等同于js的parseInt(value)

使用:与v-model配合使用,v-parseFloat=“v-model绑定值”

  1. Vue.directive('int', {
  2. bind: function(el, binding, vNode){
  3. el.oInput = el.getElementsByTagName('input')[0]
  4. el.maxNum = binding.arg
  5. el.handlerKeyUp = function(){
  6. if(!isNum(el.oInput.value)){
  7. el.oInput.value = ''
  8. vNode.context[binding.expression] = ''
  9. return
  10. }
  11. if(el.oInput.value){
  12. el.oInput.value = parseInt(el.oInput.value)
  13. vNode.context[binding.expression] = parseInt(el.oInput.value)
  14. return
  15. }
  16. if(!el.oInput.value){
  17. el.oInput.value = ''
  18. vNode.context[binding.expression] = ''
  19. return
  20. }
  21. }
  22. el.handlerBlur = function(){
  23. if(el.oInput.value){
  24. el.oInput.value = parseInt(el.oInput.value)
  25. vNode.context[binding.expression] =parseInt(el.oInput.value)
  26. return
  27. }
  28. }
  29. el.oInput.addEventListener('keyup',el.handlerKeyUp)
  30. el.oInput.addEventListener('blur',el.handlerBlur)
  31. },
  32. unbind:function(el){
  33. el.oInput = el.getElementsByTagName('input')[0]
  34. el.oInput.removeEventListener('keyup', el.handlerKeyUp)
  35. el.oInput.removeEventListener('blur', el.handlerBlur)
  36. }
  37. });

【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. FMC228- 四路16位1.2Gsps DA FMC子卡模块

    FMC228- 四路16位1.2Gsps DA FMC子卡模块 一.概述          FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中 ...

  2. git的HEAD指针操作

    学习操作HEAD指针,具体如下: - 查看Git版本信息 - 移动指针 - 通过移动HEAD指针恢复数据 - 合并版本 拓扑图:

  3. java通过图片URL下载图片

    public InputStream getInputStream(String imgUrl) { InputStream inputStream = null; try{ HttpURLConne ...

  4. Java8 时间处理类的使用实践(LocalDate...)

    有了它,谁还在用Date?Calendar? 其实也不能这么绝对,毕竟还没到那个程度上.Java8 新增了处理时间的一组类(LocalDate.LocalDateTime.LocalTime),刚开始 ...

  5. 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- ...

  6. 装饰器模式-Decerator

    一.定义 装饰器模式又叫做包装模式(Wrapper).装饰器模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 在以下情况下应该使用装饰器模式: 1.需要扩展一个类的功能,或给一个类增 ...

  7. css3 :enabled与:disabled伪类选择器

    css :enabled和:disabled伪类选择器 在Web表单中,有些表单元素(如输入框.密码框.复选框等)有“可用”和“不可用”这2种状态.默认情况下,这些表单元素都处在可用状态. 在CSS3 ...

  8. Git关联JIRA的issue

    指导文章 http://www.51testing.com/html/30/n-3724930.html http://{$host_url}/help/user/project/integratio ...

  9. [POJ1187] 陨石的秘密

    问题描述 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石 ...

  10. 使用vue进行国际化

    相对于网站等一些需求 我们有需要做国际化的需求,具体步骤如下: 首先安装 vue-i18n npm install vue-i18n import VueI18n from 'vue-i18n' Vu ...