Wer*_*eta 0 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">
Run Code Online (Sandbox Code Playgroud)
你有更好的方法来做到这一点吗?如果我在每个数字上有 2 个或更多逗号,它真的无法一次性取消所有数字的格式。
问题在于您调用.replace()方法的方式:
var unformatted = formatted.replace(",", "");
Run Code Online (Sandbox Code Playgroud)
如果您将字符串作为第一个参数传递,它只会替换第一次出现。如果您传递正则表达式,您可以设置正则表达式“全局”标志来替换所有出现的:
var unformatted = formatted.replace(/,/g, "");
Run Code Online (Sandbox Code Playgroud)
请注意,您的代码可以简化很多,因为您并不真正需要局部变量:
$(this).val( $(this).val().replace(/,/g, "") );
Run Code Online (Sandbox Code Playgroud)
但它可以进一步简化,因为如果您将函数传递给.val()方法,您甚至不需要.each()循环:
$(function(){
$("#next").click(function(){
//unformats the numbers
$("input[data-toformat=format]").val(function(i, oldVal){
return oldVal.replace(/,/g, "");
});
});
});
Run Code Online (Sandbox Code Playgroud)
此语法 for.val()将每个元素的旧(当前)值传递给您提供的函数,将新值设置为该函数的返回值。