テーブルに一連の入力ボックスがあり、動的に生成された行がいくつかあります。
<table id="someDataTable">
<tbody>
<tr>
<td >Some Title</td>
<td >Units</td>
<td >Val/Unit</td>
<td >Value</td>
</tr>
<tr>
<td><input type="text" size="30" /></td>
<td><input type="text" size="14" class="units commas"/></td>
<td><input type="text" size="14" class="value commas"/></td>
<td><input type="text" size="14" readonly="readonly" class="autoTotal"/></td>
</tr>
...
</tbody>
</table>
ここで、気の利いたNumber Formatterプラグインでコンマを追加するために入力ボックスが終了するたびにコンマを追加する blur() 呼び出しがあり、単純にこれを行います。
<script>
$(".commas").blur(function () {
$(this).parseNumber({ format: "#,###", locale: "us" });
$(this).formatNumber({ format: "#,###", locale: "us" });
});
</script>
そして、それは美しく機能します。さて、反対側には、キーストロークごとにフォーム計算を自動的に行うコードのチャンクもあります。次のような initialize() の呼び出しがあります。
$(document).on('keyup', '#someDataTable', DoCalculations);
呼び出す関数は次のようになります。
function DoCalculations() {
$(this).find('tr').each(function () {
var tUnits = $(this).find('.units').val();
var tValue = $(this).find('.value').val();
$(this).find('.autoTotal').val(Math.round(tUnits * tValue));
});
}
--
さて、私の問題: 計算を行うためにコンマを取り除けるようにする必要があります。これを行うために NumberFormatter の parseNumber() 関数を使用できるようにしたいと思っていましたが、少しうまくいきませんでした。これは、それを達成しようとする DoCalculations の代替コードです。
function DoCalculations() {
$(this).find('tr').each(function () {
var tTotal;
var tUnits = $(this).find('.units').val();
var tValue = $(this).find('.value').val();
tUnits = $.parseNumber(tUnits, { format: "#,###", locale: "us" });
tValue = $.parseNumber(tValue, { format: "#,###", locale: "us" });
tTotal = tUnits * tValue;
tTotal = $.formatNumber(tTotal, { format: "#,###", locale: "us" });
$(this).find('.autoTotal').val(tTotal);
});
}
しかし、NumberFormatter.js で実行時エラーが発生し、未定義または null 参照の numberString.indexOf のプロパティを取得できません。正確には442行目。理由はわかりませんが。最初は空の入力ボックスがあったためだと思っていましたが、それは問題ではありませんでした。
結局のところ、コンマを削除する必要があります。