javascript格式化数字输入

1.在客户输入数量的时候,能够将客户输入的数量三位三位的分开显示,具体如“123,456,234”等等,并且保留二位小数。

      function getArray(obj) {
            var string = obj.value;
            var s = string.replace(/,/g, "");
            var ss = s.substr(0, s.indexOf("."));
            var length = 0;
            if (ss != "")
                length = ss.length;
            else
                length = s.length;
            var len = parseInt(length / 3);
            var len_y = length % 3;
            if (len_y == 0) {
                len--;
                len_y = 3;
            }

            var rs = "";
            for (i = 0; i <= len; i++) {
                if (i == 0)
                    rs = s.substring(0, len_y);
                else {
                    if (rs != "") rs = rs + ",";
                    rs = rs + s.substring(len_y + (i - 1) * 3, i * 3 + len_y);
                }
            }
            if (obj.value != "" && s.indexOf(".") < 0)
                obj.value = rs + ".00";
            else
                obj.value = rs + s.substr(s.indexOf("."),3);
        }

然后在jsp或者html,反正就是页面中text文本框添加οnkeyup="getArray(this);"就好。

这里边有个比较关键的地方,就是过滤文本框中的数字中的“,”,js的replace(a,b)函数比较缺德,智能过滤掉第一个出现的字符串a,而不能替换掉所有的。而没有replacementAll()函数,所以必须要靠强大的正则来过滤掉所有的出现过的a了。于是用上“/g”,最开始我们使用的是“/[\,]/g”,结果一个过滤不了。最后单步调试。发现了函数吧整个引号中的部分当做过滤字符串的原型来查找,当然找不到啦,所以最后抱着试一试的心情,改成现在这个样子就行了。
    另外不得 不说的就是这个onkeyup和onkeypress的区别。我最开始采用的是onkeypress 事件,发生了很有意思的一件事情。各位高人可以试一试。onkeypress事件发生时还没有取得输入的字符,而onkeyup事件在发生时已经取得所输入的字符。


2.失焦后,格式化数字——————s为输入内容,n为保留的小数位数

function fmoney(s, n)
{
   n = n > 0 && n <= 20 ? n : 2;
   s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
   var l = s.split(".")[0].split("").reverse(),
   r = s.split(".")[1];
   t = "";
   for(i = 0; i < l.length; i ++ )
   {
      t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
   }
   return t.split("").reverse().join("") + "." + r;
}


3.保存的时候还原数字
function rmoney(s)
{
   return parseFloat(s.replace(/[^\d\.-]/g, ""));
}


聚焦事件 onfocus

失焦事件 onblur

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值