2012-02-03 7 views
0

jqnumformatterプラグインを使用して番号をフォーマットします。すべてが問題ありませんが、カンマの削除に問題があります。私は.each()を使用して、コンマを持つすべての入力をループしました。しかし、この場合、次のボタンを2回クリックして、数字のすべてのカンマが削除されるようにする必要があります。jqueryのフォーマットとアンフォーマット番号

<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つの以上のカンマを持っている場合は一度にすべての数字をアンフォーマットに失敗しました。あなたはそれが最初のオカレンスだけを置き換える最初のパラメータとして文字列を渡すと

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

答えて

3

問題は、あなたが.replace() methodを呼び出している方法です。あなたが正規表現を渡す場合は、すべての出現箇所を置き換えるために、正規表現「グローバル」フラグを設定することができます。

:あなたは本当にローカル変数を必要としないので、あなたのコードはかなり単純化することができることを

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()のこの構文は、各要素の古い(現在の)値を指定した関数に渡し、新しい値をその関数からの戻り値に設定します。

+0

これは、動的に生成された要素に対しては機能しますか? –

+0

動的に生成される要素に対して_what_は機能しますか? '.replace()'部分はどの文字列でも動作します。 '.val()'部分(またはあなたのコードからの '.each()')は、それを実行するjQueryオブジェクトの任意の要素、つまりその時点でセレクタに一致した要素に対して機能します。 – nnnnnn