0

注文のキューブ数を合計する jquery / javascript 関数があります。これは100%機能し、以下にあります。

function calculateTotalVolume() {
    var grandTotalCubes = 0;
    $("table.authors-list").find('input[name^="cubicvolume"]').each(function () {
        grandTotalCubes += +$(this).val();
    });
    $("#grandtotalcubes").text(grandTotalCubes.toFixed(2));
}

上記のように、うまく機能します。同じフィールドを合計するには 2 番目の関数が必要ですが、それは、「処理済み」という名前のチェックボックスがオンになっている場合のみです。各行には処理されたという名前のチェックボックスがありますが、テーブルが動的に生成されるため、毎回カウンターが名前に追加されるため、name^="treated"

私は以下のようなものを求めていますが、これは機能しません:

function calculateTotalTreatedVolume() {
    var grandTotaltreatedCubes = 0;
    $("table.authors-list").find('input[name^="cubicvolume"]').each(function () {
        if($("table.authors-list").find('checkbox[name^="treated"]').checked){
            alert('10');
            grandTotaltreatedCubes += +$(this).val();
    }

    });
    $("#grandtotaltreatedcubes").text(grandTotaltreatedCubes.toFixed(2));
}

いつものように感謝します。

アップデート

レンダリングされた HTML 出力 [1 つの動的行が追加されました]: (まだ開発中のため、非常に大雑把ですが、ご容赦ください)

<table class="authors-list" border=1>
  <thead>
    <tr>
      <td></td><td>Product</td><td>Price/Cube</td><td>Qty</td><td>line total cost</td><td>Discount</td><td>Cubes per bundle</td><td>pcs per bundle</td><td>cubic vol</td><td>Bundles</td><td><input type="checkbox" class="checkall"> Treated</td>
    </tr>
  </thead>
  <tbody>
    <tr>
     <td><a class="deleteRow"> <img src="http://devryan.tekwani.co.za/application/assets/images/delete2.png" /></a></td>
     <td><input type="text" id="product" name="product" />
     <input type="hidden" id="price" name="price" readonly="readonly"/></td>
     <td><input type="text" id="adjustedprice" name="adjustedprice" /></td>
     <td><input type="text" id="qty" name="qty" /></td>
     <td><input type="text" id="linetotal" name="linetotal" readonly="readonly"/></td>
     <td><input type="text" id="discount" name="discount" /></td>
     <td>
        <input type="text" id="cubesperbundle" name="cubesperbundle" >
    </td>
    <td>
        <input type="text" id="pcsperbundle" name="pcsperbundle" >
    </td>
    <td>
        <input type="text" id="cubicvolume" name="cubicvolume"  size='5' disabled>
    </td>
     <td><input type="text" id="totalbundles" name="totalbundles" size='5' disabled ></td>
    <td valign="top" ><input type="checkbox" id="treated" name="treated" ></td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
        <td colspan="15"><input type="button" id="addrow" value="Add Product" /></td>
    </tr>
    <tr>
        <td colspan="3">Grand Total: R<span id="grandtotal"></span></td>
        <td colspan="2">Ave Discount: <span id="avediscount"></span>%</td>
        <td colspan="1">Total Cubes: <span id="grandtotalcubes"></span></td>
        <td colspan="15">Treated Cubes: <span id="grandtotaltreatedcubes"></span></td>
    </tr>

    <tr>
        <td colspan="15"><textarea  rows="1" cols="50" placeholder="Specific Comments"></textarea><textarea  rows="1" cols="20" placeholder="Customer Reference"></textarea>
</td>
    </tr>
  </tfoot>
</table>
4

5 に答える 5

2

最初に親 tr に移動し、次に find を使用して現在の行のチェックボックスを検索し、checked を jQuery オブジェクトではなく DOM オブジェクトで使用すると、インデクサーを使用して jQuery オブジェクトを DOM オブジェクトに変換できます。

変化する

if($("table.authors-list").find('checkbox[name^="treated"]').checked){

if($(this).closest('tr').find('checkbox[name^="treated"]')[0].checked){
于 2013-04-05T10:02:31.390 に答える
2

checkedは実際の DOM 要素のプロパティであり、あなたが持っているのは jQuery 要素です。これを変更する必要があります:

$("table.authors-list").find('checkbox[name^="treated"]').checked

これに:

$("table.authors-list").find('checkbox[name^="treated"]')[0].checked
                                                         -^- // get DOM element

またはより多くの jQuery っぽい:

$("table.authors-list").find('checkbox[name^="treated"]').is(':checked')
于 2013-04-05T10:02:38.303 に答える
1

「チェックされた」チェックボックスを使用して繰り返し、$("table.authors-list").find('checkbox[name^="treated"]:checked')それに最も近い入力の値を使用できます(同じ行にあると想定されます)。

テーブルにチェックボックスと入力を含む多くの行があると仮定すると、次を使用できます。

function calculateTotalTreatedVolume() {
    var grandTotaltreatedCubes = 0;

    // iterate through the "checked" checkboxes
    $("table.authors-list").find('input[type="checkbox"][name^="treated"]:checked').each(function () {

        // use the value of the input in the same row
        grandTotaltreatedCubes += +$(this).closest('tr').find('input[name^="cubicvolume"]').val();

    });
    $("#grandtotaltreatedcubes").text(grandTotaltreatedCubes.toFixed(2));
}
于 2013-04-05T10:05:03.500 に答える
1

これを試して:

var grandTotaltreatedCubes = 0;

// Cache the table object here for faster processing of your code..
var $table = $("table.authors-list");

$table.find('input[name^="cubicvolume"]').each(function () {

    // Check if checkbox is checked or not here using is(':checked')
    if ($table.find('checkbox[name^="treated"]').is(':checked')) {
        grandTotaltreatedCubes += $(this).val();
    }
});

$("#grandtotaltreatedcubes").text(grandTotaltreatedCubes.toFixed(2));
于 2013-04-05T10:12:22.147 に答える
1

次の行を変更します

if($("table.authors-list").find('input[name^="treated"]').checked){

これに

if($("table.authors-list").find('input[name^="treated"]').is(':checked')){
于 2013-04-05T10:03:31.187 に答える