首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JS金额输入的处理解决方法

2012-04-03 
JS金额输入的处理我在text里要输入金额,格式是xx.xx,小数点后必须有两位,如果用户输入的不是数字,便不能显

JS金额输入的处理
我在text里要输入金额,格式是xx.xx,小数点后必须有两位,如果用户输入的不是数字,便不能显示,如果用户输入的是xx,则自动变成xx.00,如果用户输入的是xx.x则自动变马xx.x0 
请指点下,谢谢了

[解决办法]

探讨
……
非常感谢CLinHF,经过测试,有2点小小的瑕疵外,基本符合要求
1.负号只能第一个字母输入,用户如果输入到一半才发现应该是负数,则需要全部删除重新输入,对用户来说肯定会有点不满意的。
2.只有失去焦点的时候才进行小数的判断和补充,是否可以做到和千分位一样每一次按键都进行格式化并返回,光标默认在小数点前面,当按下小数点符号后输入的数字自动替换小数点后的数字。

===========================
(第二个只是我了解的最理想状态,很可能是因为控件的原因。第一个还是比较重要的,希望可以继续完善下)

[解决办法]
改了改,好像解决了27楼的问题
还是得用onkeypress啊……
HTML code
 <INPUT TYPE="text" style="ime-mode:disabled" onkeydown="if(event.repeat)event.returnValue=false;//屏蔽连按" onkeypress="initPrice(this)" onblur="checkinp(this)">  <SCRIPT LANGUAGE="JavaScript">  <!--    function initPrice(oInput){        var num = oInput.value;        /* 取光标位置 */        var s = document.selection.createRange();         var r = oInput.createTextRange();        s.setEndPoint( "StartToStart",r);        var curP = s.text.length;        num = num.substring(0,curP) + String.fromCharCode(event.keyCode) + num.substring(curP);        var reg = /^\-?([\d\,]*\.?\d{0,3}?)?$/;        // 0~9:48~57; \,:44; \-:45; \.:46;         if ( event.keyCode<44 || event.keyCode>57 || event.keyCode==47 || !reg.test(num) ) {            if (event.keyCode==46) curP = num.indexOf(".")+1;            event.returnValue = false;        }        else {            curP += 1;            if (num=="-") return;            if (/\.\d{3}$/.test(num)) num = num.substring(0,num.length-1);            event.returnValue = false;            num = num.replace(/,/g,"");            num = parseFloat(num).toFixed(2);            var re = /(-?\d+)(\d{3})/;            while(re.test(num)){               num = num.replace(re,"$1,$2")            }            oInput.value=num;            if(num.indexOf(".")>0 && curP <= num.indexOf(".") ) curP = num.indexOf(".");        }        //恢复光标位置        r.moveStart( 'character',curP);         r.collapse(true);         r.select();     }    function checkinp(obj){            var num = obj.value.replace(/,/g,"");            num = parseFloat(num).toFixed(2);            var re = /(-?\d+)(\d{3})/;            while(re.test(num)){               num = num.replace(re,"$1,$2")            }            obj.value=num;    }  //-->  </SCRIPT> 

热点排行