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));
}
}