文本框只能输入数字和小数点,且小数点后只允许两位数字

根据功能要求,第一次开始了解及着手整理写写文本框text的相关特性,在网上找了很多例子,根据功能需要,整理了一下,主要功能:

1.文本框只能输入数字和小数点,且小数点后只允许两位数字

2.输入的数字有最大、最小值,当输入值小于最小值时,文本框清空,当输入值大于最大值时,清除最后一个字符

3.如果文本框输入的是金额,当光标离开时,默认显示小数点后两位

以下是相关代码(需要引用jquery库哈)


常规:<input id="TxtNormal" type="text" value=""/><br/>
禁止粘贴复制:<input id="TxtCopy"  type="text" name="city" value="" oncopy="return false" oncut="return false" /><br/>
输入结束后默认显示小数点两位:<input id="TxtTwo"   type="text" name="city" value=""/>

<script type="text/javascript">
$(function(){
    
     $("#TxtNormal").keyup(function(){
         var min=0;
         var max=200;
         amount(this,min,max);
         $(this).bind("paste", function() {
          return false;
         });
         });
     $("#TxtCopy").keyup(function(){
         var min=0;
         var max=200;
         amount(this,min,max);
         $(this).bind("paste", function() {
          return false;
         });
         });

     $("#TxtTwo").keyup(function(){
         var min=0;
         var max=300;
         amount(this,min,max);
         });
      $("#TxtTwo").blur(function(){
         overFormat(this);
         });
     });

/**
* 实时动态强制更改用户录入
* arg1 inputObject
**/
function amount(th,min,max){
    oncopy="return false;";
    oncut="return false;";
    onpaste="return false" ;
    var regStrs = [
        ['^0(\\d+)$', '0'], //禁止录入整数部分两位以上,但首位为0
        ['[^\\d\\.]+$', ''], //禁止录入任何非数字和点
        ['\\.(\\d?)\\.+', '.$1'], //禁止录入两个以上的点
        ['^(\\d+\\.\\d{2}).+', '$1'] //禁止录入小数点后两位以上
    ];
    for(i=0; i<regStrs.length; i++){
        var reg = new RegExp(regStrs[i][0]);
        th.value = th.value.replace(reg, regStrs[i][1]);
    }
    var getValue = $(th).val();
         var min=min;
         var max=max;
         if(parseInt(getValue)<min||parseInt(getValue)>max){
          getValue = $(th).val(getValue.substring(0,getValue.length-1));
          return;
         }
    $(th).bind("paste", function() {
    return false;
   });
    
}
 
/**
* 录入完成后,输入模式失去焦点后对录入进行判断并强制更改,并对小数点进行0补全
* arg1 inputObject
* 这个函数写得很傻,是我很早以前写的了,没有进行优化,但功能十分齐全,你尝试着使用
* 其实有一种可以更快速的JavaScript内置函数可以提取杂乱数据中的数字:
* parseFloat('10');
**/
function overFormat(th){
    var v = th.value;
    if(v === ''){
        v = '0.00';
    }else if(v === '0'){
        v = '0.00';
    }else if(v === '0.'){
        v = '0.00';
    }else if(/^0+\d+\.?\d*.*$/.test(v)){
        v = v.replace(/^0+(\d+\.?\d*).*$/, '$1');
        v = inp.getRightPriceFormat(v).val;
    }else if(/^0\.\d$/.test(v)){
        v = v + '0';
    }else if(!/^\d+\.\d{2}$/.test(v)){
        if(/^\d+\.\d{2}.+/.test(v)){
            v = v.replace(/^(\d+\.\d{2}).*$/, '$1');
        }else if(/^\d+$/.test(v)){
            v = v + '.00';
        }else if(/^\d+\.$/.test(v)){
            v = v + '00';
        }else if(/^\d+\.\d$/.test(v)){
            v = v + '0';
        }else if(/^[^\d]+\d+\.?\d*$/.test(v)){
            v = v.replace(/^[^\d]+(\d+\.?\d*)$/, '$1');
        }else if(/\d+/.test(v)){
            v = v.replace(/^[^\d]*(\d+\.?\d*).*$/, '$1');
            ty = false;
        }else if(/^0+\d+\.?\d*$/.test(v)){
            v = v.replace(/^0+(\d+\.?\d*)$/, '$1');
            ty = false;
        }else{
            v = '0.00';
        }
    }
    th.value = v;
}
</script>

posted @ 2015-10-16 14:57  凌小麦  阅读(1549)  评论(0)    收藏  举报