INPUT 只能输入数字(且固定整数长度、小数长度最大长度)

2018-12-21  本文已影响0人  M_ENG

<input type="text"  onchange="this.value=validateNumber(8,2,this.value)" 
onkeyup="this.value=validateNumber(8,2,this.value)" 
onkeydown="this.value=validateNumber(8,2,this.value)" />

/**
 * 正数 范围  有小数 设置type=number 默认将.结尾的去掉
 * @param precision
 * @param scale
 * @param value
 * @returns {*}
 */
function validateNumber(precision,scale,value)
{
    //不符合 数字
    if (isNaN(value))
    {
        if(value == '.')
        {
            return "";
        }

        // 两个.  不符合规范
        if(value.split('.').length > 2)
        {
            return $.trim(value.substr(0,value.length-1));
        }
        //解决 中文输入bug
        return $.trim(value.replace(/[^0-9|^.]/g,''));
    }


    var tmpVal = parseFloat(value);

    if(value != "")
    {
        var valueArray = value.split('.');

        //去前缀0   例如 01 001
        if(value.indexOf('.') == value.length - 1)
        {
            value = parseFloat(value);

            value = value + ".";
        }
        else if(valueArray.length == 2)
        {
            value = parseFloat(value);

            var val1 = parseFloat(valueArray[1]);

            if(val1 == 0)
            {
                value = value + ".";

                for(var i = 0; i < valueArray[1].length; i++)
                {
                    value += "0";
                }
            }
            else
            {
                value = value + "";
            }
        }
        else
        {
            value = parseFloat(value);

            value = value + "";
        }

    }

    var maxVal = '';

    //var minVal = '-'; //如果还需要判断负数 将0换成minVal

    if(precision <= 0 || scale < 0 || scale > precision)
    {
        alert("validateNumber函数参数错误!");

        return '';
    }

    //整数位数小
    for (var i = 0;i < precision-scale; i++)
    {
        maxVal += '9';
    }

    //有小数
    if(scale > 0)
    {
        maxVal += '.';

        for(var i = 0;i < scale;i++)
        {
            maxVal += '9';
        }
    }
    else
    {
        //判断是否有小数  删除小数点和小数点后面的数
        if((value.indexOf('.')+1) > 0)
        {
            return $.trim(value.substr(0,value.length-1));
        }
    }

    if(tmpVal >= 0 && tmpVal <= maxVal)
    {
        if(scale > 0)
        {
            //判断是否有小数   小数长度不能超过scale
            if(value.indexOf('.') > 0)
            {
                if(value.substr(value.indexOf('.')+1,value.length-1).length > scale)
                {
                    return $.trim(value.substr(0,value.length-1));
                }
            }
        }

        return $.trim(value);
    }
    else
    {
        return $.trim(value.substr(0,value.length-1));
    }
}


上一篇下一篇

猜你喜欢

热点阅读