1

私は次のような動的なフォームを持っています:

<form id="formaa">
<div class="row">
  <input type="text" name="item" class="item"></input>
  <input type="text" name="quant" class="quant"></input>
  <input type="text" name="price" class="price" onkeyup="update();"></input>
  <input type="text" name="sum" id="suma" size="10" disabled="disabled"/>
</div>
<div class="row">
  <input type="text" name="item" class="item"></input>
  <input type="text" name="quant" class="quant"></input>
  <input type="text" name="price" class="price" onkeyup="update();"></input>
  <input type="text" name="sum" id="suma" size="10" disabled="disabled"/>
</div>    
<!-- ... many more rows -->
<input type="text" disabled id="total" name="tot"></input>
</form>

私がやろうとしているのは、アイテムの数量と価格を掛けて、各アイテムの合計フィールドで個別に合計を取得することです(すべてのアイテムの合計ではありません)。

私が達成したのはこの関数ですが、すべてのアイテムの合計を個別にカウントしていないようです。これは、最初のデフォルトのフィールド行で機能し、新しいフィールドのセットを追加して、フィールド(および後で追加されたその他)の両方の情報を入力します。合計値はNaNになります。追加されたすべてのフィールドセットを削除し、最初のフォームの行を設定したままにすると、数値が再び機能します。ここでの問題は何ですか。

<script type="text/javascript">
function update() {
  var total = 0;
  $("#formaa div.row").each(function(i,o){
    total += $(o).find(".quant").val() *
        $(o).find(".price").val();
         if(!isNaN(total) && total.length!=0) {
                sum += parseFloat(total);
            }
  });
  $("#formaa div.row #suma").val(total);
}
</script>
4

1 に答える 1

4
function update() {
  $("#formaa div.row").each(function(i,o){
     var total = $(o).find(".quant").val() * $(o).find(".price").val();
     if(!isNaN(total) && total.length!=0) {
         sum += parseFloat(total);
     }
     $(o).find('[name="sum"]').val(total);
  });
}

コード内のいくつかの問題:

  • 複数の要素に同じ ID を与えないでください。それが、名前にセレクターを定義した理由です
  • あなたは合計をリセットしていなかったので、それはすべての合計でした
  • 修正はしていませんが、float解析の操作がおかしい(見えない内容にもよるかもしれません)
于 2012-07-12T14:36:10.303 に答える