实现效果

设置子组件

<template><el-inputref="money"v-model.trim="money":placeholder="placeholder"v-bind="$attrs"v-on="$listeners"@input="formatNumber(money,'money')"@keyup.enter.native="moneyChange()"@blur="moneyChange()"><template slot="append">人</template></el-input>
</template><script>
export default {name: 'MoneyInput',props: {value: {type: null,required: true},placeholder: {type: String,default: '请输入金额'},enterFuc: {type: Function,default: () => {}},data: {type: null,default: null},template: {  //是否展示单位type: String,default: ''}},data() {return {money: this.value,}},watch: {value(newValue, oldValue) {this.money = newValuethis.formatNumber(this.money, 'money')}},mounted() {this.formatNumber(this.money, 'money')},methods: {fmresource(s) {if (s === '' || s === null || s === '.00' || s === undefined) {return ''}if (s === '-') {return '-'}var lose = ''// 负号if (s < 0) { // 判断是否是负数s = (s + '').substring(1)// 截取-号lose = '-'}s = s + ''// n = n > 0 && n <= 20 ? n : 2;.toFixed(n)// s = parseFloat((s + "").replace(/^[^\d.-]/g, "")) + "";var l = s.split('.')[0].split('').reverse(); var r = ''; var t = ''if (s.indexOf('.') > -1) {if (s.split('.')[1] !== null && s.split('.')[1] !== undefined) {if (s.split('.')[1].length > 2) {s = Number(s).toFixed(2)}r = ('.' + s.split('.')[1])} else {r = ''}}for (let i = 0; i < l.length; i++) {t += l[i] + ((i + 1) % 3 === 0 && (i + 1) !== l.length ? ',' : '')}return lose + '' + t.split('').reverse().join('') + r// 拼接},formatNumber(value, name) {this.$emit('update:data', value)value = value + ''// 获取input的dom对象,这里因为用的是element ui的input,所以需要这样拿到const input = this.$refs[name].$el.getElementsByTagName('input')[0]// 获取当前光标的位置const cursorIndex = input.selectionStart// 字符串中光标之前-的个数const lineNumOfCursorLeft = (value.slice(0, cursorIndex).match(/,/g) || []).length// 去掉所有,的字符串const noLine = value.replace(/,/g, '')// 重新格式化const newvalue = this.fmresource(noLine.replace(/[^\d\.-]/g, ''))// .replace(/(\d{4})/g, '$1 ').replace(/ $/, '')// 改后字符串中原光标之前,的个数const newLineNumOfCursorLeft = (newvalue.slice(0, cursorIndex).match(/,/g) || []).length// 光标在改后字符串中应在的位置const newCursorIndex = cursorIndex + newLineNumOfCursorLeft - lineNumOfCursorLeft// 赋新值,nextTick保证-不能手动输入或删除,只能按照规则自动填入this.$nextTick(() => {this.money = newvalue// 修正光标位置,nextTick保证在渲染新值后定位光标this.$nextTick(() => {// selectionStart、selectionEnd分别代表选择一段文本时的开头和结尾位置input.selectionStart = newCursorIndexinput.selectionEnd = newCursorIndex})})},moneyChange() {const v = this.money ? (this.money + '').replace(/,/g, '').replace(new RegExp(/(\d+)(\.)(\d*)(\2*)(\d*)/g), '$1$2$3$5') : 0const money = Object.is(Number(v), NaN) ? 0 : Number(v)this.$emit('input', money)this.enterFuc()}}
}
</script>

在父组件引入

引入组件
import MoneyInput from “./compontents/index”

components: {MoneyInput},

使用

<Money-input v-model.trim="project.hospitalnumber"  template="append" style="width: 100%"></Money-input>

基于Element ui 实现输入框只能输入数字并支持千分位相关推荐

  1. js限制输入框只能输入数字

    分享下js限制输入框中只能输入数字的方法,包括整数与小数,分享几个例子,有需要的朋友参考下. 1.使用正则表达式限制输入框只能输入数字: 1 <input type="text&quo ...

  2. input输入框只能输入数字,只能输入字母数字组合

    input输入框只能输入数字,字母数字组合,汉字等 input里需要控制输入的类型,可以通过onkeyput或oninput对输入的内容进行校验.输入大小写字母.数字.下划线:onkeyup=&quo ...

  3. 要求输入框只能输入数字跟破折号

    要求输入框只能输入数字跟破折号 让输入框接受像"1234-123456789"这样的数字 让输入框接受像"1234-123456789"这样的数字 <a- ...

  4. 通过javascri实现输入框只能输入数字

    输入框只能输入数字 <input type="text" οnkeyup="value=value.replace(/[^\d]/g,'');"> ...

  5. 【 javascript】<input> 实现输入框只能输入数字(个人认为最好的)

    <input> 实现输入框只能输入数字 需求背景: 方案一:使用`JS`限制 input 输入框只能输入纯数字 方案二:`VUE`使用`a-input-number组件`限制 input ...

  6. 控制输入框只能输入数字

    1.将input的属性type改为number 2.这时的输入框会有小箭头, 去掉小箭头的方法,给input添加样式 input::-webkit-outer-spin-button,input::- ...

  7. elementUI输入框只能输入数字解决方案

    借鉴地址 需求描述 1.只能输入数字 2.控制输入11位 3.验证如果不是11位提示错误 4.当输入时取消验证,没有错误提示 问题 1.el-input type=number e仍然可以输入,方案p ...

  8. html input输入框 只能输入数字 只能输入字母数字组合

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  9. MFC如何让输入框只能输入数字

    PS:这是本人第一次写CSDN的博客,以后我都会把笔记记在CSDN上,便于保存.本人也是小白,可能写得不好,勿喷! 假设这个输入框添加一个CString变量叫m_strValue int nLen = ...

最新文章

  1. 动态规划 BZOJ1584 [Usaco2009 Mar] Cleaning Up 打扫卫生
  2. tibco linux安装手册,TIBCO iProcess安装系列在Linux上升级Oracle9.2.0.4到9.2.0.7
  3. 索引访问方法及索引优化
  4. 微服务架构基础之Service Mesh
  5. asp.net怎么实现按条件查询_【33期】分别谈谈联合索引生效和失效的条件
  6. 【转】CSS3 圆角 阴影 渐变 透明 旋转等功能详述
  7. linux用vim编辑后保存显示错误,因为vim编辑文档未保存。再次编辑同一个文件时出现报错的解决...
  8. 【人脸表情识别】基于matlab GUI LBP+SVM脸部动态特征人脸表情识别【含Matlab源码 1369期】
  9. 利用python调用谷歌翻译API
  10. 文件上传到QQ邮箱文件中转站,链接
  11. 双浮点运算计算机在线,双浮点运算计算器
  12. 网吧防火墙选购(转)
  13. android 信号检测工具,信号检测软件下载-Signal Strength 安卓版v23.0.1-PC6安卓网
  14. git lab提交记录中有 merge branch ‘xxx‘ of of http:xxx into xxx
  15. ubuntu server 20.04 配置无线wifi网络并设置固定ip公司连接家里的linux服务器配置
  16. 平价的蓝牙耳机哪家质量好?学生党公认的五款高品质蓝牙耳机
  17. java.lang.SecurityException: User has not given permission to device UsbDevice
  18. 自己动手写一个操作系统——MBR(1)
  19. 云栖大会·南京峰会落下帷幕,阿里云都干了些什么?
  20. 车用摄像头的一个应用(想法)

热门文章

  1. HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)
  2. S3C2440 汇编指令
  3. yii的多个相同modle表单提交问题(未解决)
  4. 浓缩摘要_浓缩咖啡的收益递减
  5. 使用doxygen和latex生成PDF文件
  6. 负债的阶梯,你在第几层?
  7. 草原深处的“那达慕”
  8. Linux-Android系统启动之INIT进程和system v init
  9. 补码、无符号数减法运算
  10. 计算机d盘给c盘,win10 c盘与d盘都是主分区如何将d盘空间分给c盘