支持2位 小数 文本框,对比 输入前后 校验 非字符

本文通过JavaScript实现一个支持最多2位小数的文本框,具备自动补0、超位数校验、非数字输入检测等功能。当输入超过2位小数或输入非数字时,系统会进行相应报错并恢复原状。
摘要由CSDN通过智能技术生成

先看代码

<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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值