<el-input>只能输入数字,保留两位小数

实现思路

单独做一个组件来实现额外的功能

只能输入数字:   监听input事件,在监听函数中通过正则处理掉非字符

保留两位小数:   监听blur事件,在失去焦点时格式化为2位小数,对于从prop中进来的value属性每次都进行格式化

完整代码

复制代码
<template>
    <el-input 
    v-model="inputValue" 
    @blur="onBlur"
    @input="onInput"/>
</template>

<script>
const debounce=(func,awit,immediately)=>{//防抖函数
    var timer;
    return function(){
        var self=this;
        if(immediately && !timer){
            func.call(self)
        }
        
        if(timer)
            clearTimeout(timer);
        timer=setTimeout(function(){
            func.call(self)
        },awit)
    }
}

const toDecimal2=(x)=>{//格式化函数
    if(x.split('.').length>2){
        x=x.split('.').slice(0,2).join('.');
    }
    var f = parseFloat(x); 
    if (isNaN(f)) {   
        return '0.00';   
    }   
    f = Math.round(x*100)/100;   

    var s = f.toString();   
    var rs = s.indexOf('.');   
    if (rs < 0) {   
        rs = s.length;   
        s += '.';   
    }   
    while (s.length <= rs + 2) {   
        s += '0';   
    }   
    return s;   
}

export default {
    props:{
        value:{
            
        }
    },
    data(){
        return {
            inputValue:this.value,
            emitEvent:debounce(()=>{
                this.$emit('input',this.inputValue)
            },1000)
        }
    },
    watch:{
        value(){
            this.inputValue=toDecimal2(this.value)
        }
    },
    methods:{
        onBlur(){
            this.inputValue=toDecimal2(this.inputValue);
        },
        onInput(value){
            this.inputValue = value.replace(/[^\d.]/g,'');
            this.emitEvent()
        }
    }
}
</script>
复制代码

 

posted @   疯魔掉书袋  阅读(6108)  评论(0编辑  收藏  举报
编辑推荐:
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
阅读排行:
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!
点击右上角即可分享
微信分享提示