先看代码
<html>
<head>
<meta charset="UTF-8">
<title>支持两位有效小数的文本框</title>
<script src="https://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
</head>
<body>
数字框:<input datatype="numeric" type="text" maxlength="15" value="0.00" onblur="formatSelf(this)">
</body>
<script type="text/javascript">
$(document).ready(function () {
// 记录控件里的原值
$("body").on('keydown', 'input', function(e){
var $this = $(this);
var currentValue = $this.val();
// 只记住符合格式的字符,防止长按
if ($this.attr("datatype") == "numeric" && !isNull(currentValue) && isDouble2(currentValue)){
$this.data('val', $(this).val());
}
}).on('keyup',"input",function(){
// 在结束输入时校验
var $this = $(this);
// 之前的值
var prev = $this.data('val');
//当前值内容
var currentValue = $this.val();
if ($this.attr("datatype") == "numeric" && !isNull(currentValue) && !isDouble2(currentValue)){
$this.val(prev).trigger('change');
alert("请输入数值型数据,最多两位小数!");
return;
}
});
});
//校验2位小数
function isDouble2(str) {
if(parseFloat(str) != 0 && !Number(str)){
return false;
}
var regu = /^(-?\d+)(.?)(\d{1,2})?$/;
var re = new RegExp(regu);
return re.test(str);
}
// 校验非空
function isNull(str) {
if (str == "" || str == null)
return true;
var regu = "^[ ]+$";
var re = new RegExp(regu);
return re.test(str);
}
function getMoneyFormat(value) {
if (!value) {
return "0.00";
}
var value = parseInt(parseFloat(value) * 100) / 100;
var xsd = value.toString().split(".");
if (xsd.length == 1) {
value = value.toString() + ".00";
return value;
}
if (xsd.length > 1) {
if (xsd[1].length < 2) {
value = value.toString() + "0";
}
return value;
}
}
// 格式化自己
function formatSelf(me){
me.value = getMoneyFormat(me.value);
}
</script>
</html>
解决问题:
1.文本框自动保留2位小数,光标离开后自动补0
2.文本框输入内容超过2位小数,校验报错直接舍弃多余的位数
3.文本框中任意位置输入非数字,校验报错并自动回复到输入前的状况
4.文本框中长按字母或大量非数字,参考3