目的效果:

1、focus时是浮点数

2、blur时展示的是千分符格式

3、输入框取值时是浮点数

4、基于element-ui el-input

:value="formatValue"

v-bind="$attrs"

v-on="inputListeners"

/>

export default {

name: 'CurrencyInput',

inheritAttrs: false,

props: {

value: {

type: [String, Number],

default: null,

desc: '数值'

}

},

data: () => {

return {

formatValue: ''

}

},

computed: {

inputListeners: function() {

var vm = this

// `Object.assign` 将所有的对象合并为一个新对象

return Object.assign({},

// 我们从父级添加所有的监听器

this.$listeners,

// // 然后我们添加自定义监听器,

// // 或覆写一些监听器的行为

{

// 这里确保组件配合 `v-model` 的工作

input: function(event) {

vm.formatValue = event

vm.$emit('input', parseFloat(vm.fmoney(event).replace(/,/g, '')))

},

blur: function(event) {

vm.formatValue = vm.fmoney(vm.value)

if (vm.$listeners.blur) {

vm.$listeners.blur(event)

}

},

focus: function(event) {

vm.formatValue = vm.value

}

}

)

}

},

created() {

this.formatValue = this.fmoney(this.value)

},

methods: {

fmoney(s) {

if (s === 0) {

return '0.00'

} else if (

s === '' ||

s == null

) {

return ''

}

var n = 2

var b = parseFloat(s)

n = n > 0 && n <= 20 ? n : 2

if (b < 0) {

s = (-1 * parseFloat((s + '').replace(/[^\d\.-]/g, ''))).toFixed(n) + ''

} else {

s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + ''

}

var l = s.split('.')[0].split('').reverse()

var r = s.split('.')[1]

var t = ''

for (var i = 0; i < l.length; i++) {

t += l[i] + ((i + 1) % 3 === 0 && (i + 1) !== l.length ? ',' : '')

}

if (b < 0) {

return '-' + t.split('').reverse().join('') + '.' + r

} else {

return t.split('').reverse().join('') + '.' + r

}

}

}

}

bug 发现:

IE浏览器下

在input的focus中

vm.formatValue = vm.fmoney(vm.value)

会导致光标移向最左边

当聚焦后主动移动光标

focus: function(event) {

vm.formatValue = vm.value

if (!!window.ActiveXObject || 'ActiveXObject' in window) {

event.target.setSelectionRange(String(vm.value).length, String(vm.value).length)

}

}

setSelectionRange后会阻塞,导致focus时双击事件等一些事件无效,大概会阻塞0.1s左右

html5 input 金钱符,Vue金额千分符格式化输入组件相关推荐

  1. 给数字添加千分符 和去除千分符

    ===========================主要代码 function commafyback(num) { var x = num.split(','); return parseFloa ...

  2. Python将数字化的金额(不含千分符)转化为中文的大写金额

    def formatCurrency(currencyDigits):'''本函数旨在将数字化的金额(不含千分符)转化为中文的大写金额'''maximum_number=99999999999.99c ...

  3. js-格式化数字保留两位小数-带千分符

    很多时候发现有时候js会提示自带函数不能使用,所以自己找了很多资料实现了个 html <input type="text" class="input_text in ...

  4. word文档怎么给数字加千分符_怎样给Word添加千分符

    Word作为生活中常用的文本形式,有诸多用处,也有很多技巧,今天和大家分享的就是其中千分符的使用,千分符的效果是可以帮助我们在数字比较大,位数比较多的时候,对数字有个清晰直观的感受,快跟小编一起看看怎 ...

  5. word文档怎么给数字加千分符_word实用技巧:如何为数字添加千分符的3种方法

    我们在用Word做各类文书.标书.策划类时,有时会在文档中书写多位数的金额数据,如下图所示的调薪通知: 看到上方薪资单中的信息我是拒绝的,一般情况下,金额位数比较多时,应该设置添加千分符.但文档中12 ...

  6. 详解为整数添加千分符的正则表达式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 整数添加千分符 使用方法 详解 使用示例 总结 前言 最近在项目中遇到一个小的需求,就是给金额加上千分符,原本想着直接 ...

  7. javascript 添加千分符

    对于给一组数字添加千分符,我能想到的方法有两种,一种是通过循环遍历,另一种是使用正则表达式. 第一种方法太笨了,这里就用第二种方法实现. 代码是在网上找的,因为添加千分符的正则表达式我是不会写的. & ...

  8. 钱币分隔符(js 实现千分符)

    项目中涉及金钱展示的通常要求展示为千分符,现在把正则表达式记录如下 function toThou(str){var reg=/(\d)(?=(?:\d{3})+\b)/greturn str.rep ...

  9. js 数字转为千分符格式

    function util(){//字符串千分符this.cuter = function (v, n) {if (typeof (v) == 'string' || typeof (v) == 'n ...

最新文章

  1. eclipse快捷键操作
  2. 数据中心虚拟化不是IT变革的终点
  3. CC2540开发板学习笔记(六)——AD控制(自带温度计)
  4. 系统管理员必学的30个Linux实用命令
  5. 7.4.4 主成分分析 PCA
  6. 计算机网络多元化媒体传达,【多媒体技术论文】视觉传达设计多媒体技术的应用(共4007字)...
  7. 识别Java中的代码气味
  8. [SHOI2011]双倍回文 manacher
  9. eclipse一套全部流程的安装及配置
  10. 02331 数据结构 学习小记 归纳总结
  11. FIB常见应用明细及原理分析
  12. linux python for循环语句,Python之for循环的使用
  13. Java并发常见面试题(二)
  14. 牛客网SQL--某东篇
  15. linux下的打包命令
  16. 使用ArchR分析单细胞ATAC-seq数据(第四章)
  17. 拼多多2亿美元战略投资国美,家电市场将会如何变化?
  18. Python:布尔表达式
  19. Python批量下载 抖音无水印视频!
  20. CTF训练 SSH服务(1)

热门文章

  1. 华为3e手机html查看器,【IT之家评测室】华为 nova 3e手机图赏:小仙女的美拍神器...
  2. mysql 索引,以及sql优化总结
  3. C51 常见数据类型详解
  4. Altium 倒入Logo的最新方法
  5. 动态壁纸安卓_【安卓】能够虚化加缩放的动态壁纸
  6. 如何正确学习数据结构、算法这门课?
  7. angular项目 集成ng zorro 和ng alain
  8. Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)
  9. Linux下使用中文、字体、版
  10. 毕胜演讲:电子商务是个骗局