在jquery中格式化和取消格式化数字

时间:2012-02-03 02:40:59

标签: jquery number-formatting

我使用jqnumformatter插件格式化数字。一切都很好,但我在删除逗号方面遇到了问题。我使用.each()来遍历所有带有逗号的输入。但在这种情况下,我需要点击两次下一个按钮,以便删除数字上的所有逗号。

<script>
$(function(){

    $("#next").click(function(){//unformats the numbers

        $("input[data-toformat=format]").each(function(){
            var formatted = $(this).val();
            var unformatted = formatted.replace(",", "");
            $(this).val(unformatted);
        });

    });


});
</script>

<input type="text" id="num" data-toformat="format"  autofocus/>
<input type="text" id="num2" data-toformat="format" />
<input type="button" id="next" value="next">
<input type="button" id="back" value="back">

你有更好的方法吗?如果我在每个数字上都有2个或更多逗号,那么它真的无法一次性格式化数字。

1 个答案:

答案 0 :(得分:4)

问题在于您调用.replace() method

的方式
var unformatted = formatted.replace(",", ""); 

如果您将字符串作为第一个参数传递,它只会替换第一个匹配项。如果你传递一个正则表达式,你可以设置正则表达式&#34; global&#34;标志来替换所有出现的事件:

var unformatted = formatted.replace(/,/g, "");

请注意,您的代码可以简化很多,因为您并不真正需要本地变量:

$(this).val( $(this).val().replace(/,/g, "") );

但它可以进一步简化,因为如果你将一个函数传递给.val() method,你甚至不需要.each()循环:

$(function(){
   $("#next").click(function(){
       //unformats the numbers
       $("input[data-toformat=format]").val(function(i, oldVal){
           return oldVal.replace(/,/g, "");
       });
   });
});

.val()的这种语法会将每个元素的旧(当前)值传递给您提供的函数,并将新值设置为该函数的返回值。