<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>保留小数位数</title>
    <script type="text/javascript">
        function SaveFloat(sCtrId,nums)
        {  
            if(event.keyCode==8 || event.keyCode==37 || event.keyCode==39)
            {
               return;
            }            var s=document.getElementById(sCtrId).value;
            if(s==null || s==undefined || s=="") return;
            if(nums=="1")
            {
                if(/[^0-9\.]/.test(s))
                  return "invalid value";  
                s=s.replace(/^(\d*)$/,"$1.");  
                s=(s+"0").replace(/(\d*\.\d)\d*/,"$1"); 
            }
            if(nums=="2")
            {
                if(/[^0-9\.]/.test(s))
                  return "invalid value";  
                s=s.replace(/^(\d*)$/,"$1.");  
                s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1"); 
            }
            if(nums=="3")
            {
                if(/[^0-9\.]/.test(s))
                  return "invalid value";  
                s=s.replace(/^(\d*)$/,"$1.");  
                s=(s+"000").replace(/(\d*\.\d\d\d)\d*/,"$1");             }
            s=s.replace(".",".");  
            var re=/(\d)(\d{3},)/;  
            while(re.test(s))  
            s=s.replace(re,"$1,$2");  
            s=s.replace(/,(\d\d)$/,".$1");  
            
            
           var ary = s.split('.');   
           if (ary.length >= 2) {   
              if (ary[0] == "") {   
                ary[0] = 0;   
              }   
              var temp = ary[1];   
              if (ary[1].length > nums) {   
                  ary[1] = ary[1].substring(0, nums);   
              }    
              document.getElementById(sCtrId).value= ary[0] + "." + ary[1];   
              return;
            }   
     
           document.getElementById(sCtrId).value=s.replace(/^\./,"0.");
         
    }
    
    </script>
</head>
<body>
   输入数字: <input id="Text1" type="text" onkeyup="SaveFloat(this.id,2)"/>
</body>
</html>
代码奉上,我这个可以及时的保留小数位数,但是每输入一个数字,光标就自动跑到最后面去了,如果里面已经有值了,做了修改每次都自动跑到最后面去,体验效果不好! 有高人赐教下吗?

解决方案 »

  1.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript">
            function SaveFloat(ev,sCtrId,nums)
            {  
                var ent=ev||window.event;  //要兼容浏览器,改了一下
                if(ent.keyCode==8 || ent.keyCode==37 || ent.keyCode==39)
                {
                   return;
                }            var s=document.getElementById(sCtrId).value;
                if(s==null || s==undefined || s=="") return;
                if(nums=="1")
                {
                    if(/[^0-9\.]/.test(s))
                      return "invalid value";  
                    s=s.replace(/^(\d*)$/,"$1.");  
                    s=(s+"0").replace(/(\d*\.\d)\d*/,"$1"); 
                }
                if(nums=="2")
                {
                    if(/[^0-9\.]/.test(s))
                      return "invalid value";  
                    s=s.replace(/^(\d*)$/,"$1.");  
                    s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1"); 
                }
                if(nums=="3")
                {
                    if(/[^0-9\.]/.test(s))
                      return "invalid value";  
                    s=s.replace(/^(\d*)$/,"$1.");  
                    s=(s+"000").replace(/(\d*\.\d\d\d)\d*/,"$1");             }
                s=s.replace(".",".");  
                var re=/(\d)(\d{3},)/;  
                while(re.test(s))  
                s=s.replace(re,"$1,$2");  
                s=s.replace(/,(\d\d)$/,".$1");  
                
                
               var ary = s.split('.');   
               if (ary.length >= 2) {   
                  if (ary[0] == "") {   
                    ary[0] = 0;   
                  }   
                  var temp = ary[1];   
                  if (ary[1].length > nums) {   
                      ary[1] = ary[1].substring(0, nums);   
                  }    
                  document.getElementById(sCtrId).value= ary[0] + "." + ary[1];   
                  return;
                }   
         
               document.getElementById(sCtrId).value=s.replace(/^\./,"0.");         
        }
        var fun=function(tf){ //加上一个函数。内容选中。
            setTimeout( function() {tf.select();}, 100); 
        }
        </script>
    </head>
    <body>
        输入数字: <input id="Text1" type="text" onchange="fun(this)" onkeyup="SaveFloat(event,this.id,2)"/></body>
    </html>
      

  2.   

    fun(this) 这里的this是什么?
      

  3.   


    能不能在ie中可以通过啊,这个在ff中是可以的
      

  4.   

    ie中可以啊
    var ent=ev||window.event; //要兼容浏览器,改了一下