JSを使用して、すでにJavascriptで生成された値の列を合計しようとしています。私はJSを初めて使用するので、これはかなり間違っている可能性があります。とにかく、私はこれを試しました:
注-下部の最終コード
$(".js-package").change(function(){
var parentTable = $(this).parents("table");
var table_rows = parentTable.rows;
var height = table_rows.length;
var total = 0;
for (var i = 0; i < height; i++) {
var current_row = table_rows[i];
total += current_row[5];
}
$(parentTable).find(".js-lb-total").html((total).toFixed(2));
});
これはたくさんのhtmlに当てはまりますが、関連するのは、物事が合計されることになっているこの行があるということです。
<td class="js-lb-total">?</td>
そしてこれはさらに上に:
<td>
<%= l.select :units, dropdown, {}, :class => "unit_select js-package" %>
</td>
重要なのは、一見恣意的な数字の5は、私が要約しようとしている列(JSが0から配列を開始すると仮定)を指していることです。
私が間違っていること/それを修正する方法について何か考えはありますか?先に進んで、より完全なコードでリンクできるフィドルを開くことを検討します。そのリンクを以下に追加します。
ありがとう!
編集-以下の行合計スクリプト
$(".js-package").change(function(){
var numOfPackages = parseFloat($(this).val());
var parentTr = $(this).parents("tr");
var parentTable = $(this).parents("table");
var weight = parseFloat($(parentTr).find(".js-weight").attr('data-weight'));
var price = parseFloat($(parentTr).find(".js-lb-price").attr('data-lb-price'));
$(parentTr).find(".js-price").html(((numOfPackages * weight * price).toFixed(2)));
$(parentTr).find(".js-lbs").html((numOfPackages * weight).toFixed(2));
});
編集2-ここで基本的なフィドルリンクフィドル。ただし、何らかの理由でJSはそこで機能していません。(最初の束は私のサーバーで動作します)。したがって、特に役に立たない場合があります。
編集3-明確にするために、値がすべて別のjavascriptアクションによって動的に生成される列を合計しようとしています。それらはhtmlにはありません。それは問題の一部でしょうか?
最終編集-多くの調整とアドバイスのフォローの後、私はこれを手に入れました。これはうまく機能します(そして、各行を合計した後、価格とポンドの両方を合計します)。
$(".js-package").change(function(){
var numOfPackages = parseFloat($(this).val());
var parentTr = $(this).parents("tr");
var parentTable = $(this).parents("table");
var weight = parseFloat($(parentTr).find(".js-weight").attr('data-weight'));
var price = parseFloat($(parentTr).find(".js-lb-price").attr('data-lb-price'));
$(parentTr).find(".js-price").html(((numOfPackages * weight * price).toFixed(2)));
$(parentTr).find(".js-lbs").html((numOfPackages * weight).toFixed(2));
var table = document.getElementById('sumtable');
var table_rows = table.rows;
var height = parseInt(table_rows.length);
var lb_total = 0;
var money_total = 0;
var cell;
for (var i = 1, iLen = height - 1; i < iLen; i++) {
cell = table_rows[i].cells[5];
lb_total += Number(cell.textContent);
}
for (var j = 1, jLen = height - 1; j < jLen; j++) {
cell = table_rows[j].cells[6];
money_total += Number(cell.textContent);
}
$(parentTable).find(".js-lb-total").html(lb_total.toFixed(2));
$(parentTable).find(".js-price-total").html(money_total.toFixed(2));
});