我使用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个或更多逗号,那么它真的无法一次性格式化数字。
答案 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()
的这种语法会将每个元素的旧(当前)值传递给您提供的函数,并将新值设置为该函数的返回值。