html5 input 金钱符,Vue金额千分符格式化输入组件
目的效果:
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金额千分符格式化输入组件相关推荐
- 给数字添加千分符 和去除千分符
===========================主要代码 function commafyback(num) { var x = num.split(','); return parseFloa ...
- Python将数字化的金额(不含千分符)转化为中文的大写金额
def formatCurrency(currencyDigits):'''本函数旨在将数字化的金额(不含千分符)转化为中文的大写金额'''maximum_number=99999999999.99c ...
- js-格式化数字保留两位小数-带千分符
很多时候发现有时候js会提示自带函数不能使用,所以自己找了很多资料实现了个 html <input type="text" class="input_text in ...
- word文档怎么给数字加千分符_怎样给Word添加千分符
Word作为生活中常用的文本形式,有诸多用处,也有很多技巧,今天和大家分享的就是其中千分符的使用,千分符的效果是可以帮助我们在数字比较大,位数比较多的时候,对数字有个清晰直观的感受,快跟小编一起看看怎 ...
- word文档怎么给数字加千分符_word实用技巧:如何为数字添加千分符的3种方法
我们在用Word做各类文书.标书.策划类时,有时会在文档中书写多位数的金额数据,如下图所示的调薪通知: 看到上方薪资单中的信息我是拒绝的,一般情况下,金额位数比较多时,应该设置添加千分符.但文档中12 ...
- 详解为整数添加千分符的正则表达式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 整数添加千分符 使用方法 详解 使用示例 总结 前言 最近在项目中遇到一个小的需求,就是给金额加上千分符,原本想着直接 ...
- javascript 添加千分符
对于给一组数字添加千分符,我能想到的方法有两种,一种是通过循环遍历,另一种是使用正则表达式. 第一种方法太笨了,这里就用第二种方法实现. 代码是在网上找的,因为添加千分符的正则表达式我是不会写的. & ...
- 钱币分隔符(js 实现千分符)
项目中涉及金钱展示的通常要求展示为千分符,现在把正则表达式记录如下 function toThou(str){var reg=/(\d)(?=(?:\d{3})+\b)/greturn str.rep ...
- js 数字转为千分符格式
function util(){//字符串千分符this.cuter = function (v, n) {if (typeof (v) == 'string' || typeof (v) == 'n ...
最新文章
- eclipse快捷键操作
- 数据中心虚拟化不是IT变革的终点
- CC2540开发板学习笔记(六)——AD控制(自带温度计)
- 系统管理员必学的30个Linux实用命令
- 7.4.4 主成分分析 PCA
- 计算机网络多元化媒体传达,【多媒体技术论文】视觉传达设计多媒体技术的应用(共4007字)...
- 识别Java中的代码气味
- [SHOI2011]双倍回文 manacher
- eclipse一套全部流程的安装及配置
- 02331 数据结构 学习小记 归纳总结
- FIB常见应用明细及原理分析
- linux python for循环语句,Python之for循环的使用
- Java并发常见面试题(二)
- 牛客网SQL--某东篇
- linux下的打包命令
- 使用ArchR分析单细胞ATAC-seq数据(第四章)
- 拼多多2亿美元战略投资国美,家电市场将会如何变化?
- Python:布尔表达式
- Python批量下载 抖音无水印视频!
- CTF训练 SSH服务(1)