0

I have problem with determining if checkbox is checked in parent tr. If checkbox is cheked this tr shoud be skiped. It seemed like everything is correct in my code,but it's not working.

$(document).ready(function () {
    var sum = 0;
    $('#MainContent_gvOrders > tbody > tr > td .col1').each(function () {
        if ($(this).closest('tr').has('input:not(:checked)')) {
            sum += parseInt($(this).text());
        }
    });
    $('#tp').html(sum);
});

function pageLoad(sender, args) {
    var sum = 0;
    $('#MainContent_gvOrders > tbody > tr > td .col1').each(function () {
        if ($(this).closest('tr').has('input:not(:checked)')) {
            sum += parseInt($(this).text());
        }
    });
    $('#tp').html(sum);
}
Mr_Green
  • 40,727
  • 45
  • 159
  • 271
andrey.shedko
  • 3,128
  • 10
  • 61
  • 121
  • You haven't shown us your HTML, but this should work fine. What's the problem? Is `sum` 0? Is `sum` all of them together? Does your computer burn when you run the JS? – h2ooooooo Sep 04 '13 at 12:13
  • 2
    FYI, always mention radix when dealing with parseInt. like this: `parseInt($(this).text(), 10);`. – Mr_Green Sep 04 '13 at 12:14
  • Problem is that value of tr with cheked checkbox counting as well, but it's should not. – andrey.shedko Sep 04 '13 at 12:21

4 Answers4

2

You can simply do this using below code.

$('#MainContent_gvOrders  tr:has("input:not(:checked)")').filter(function(){
     return sum += parseInt($(this).find('td').text(), 10);
});

Demo

Dipesh Parmar
  • 27,090
  • 8
  • 61
  • 90
1

Just replace $(this).closest('tr').has('input:not(:checked)') with $(this).closest('tr').has('input:not(:checked)')[0]. (added [0] at last)

The problem is that jquery functions always return something (object). So, if you check if(object) it will be always true.

$(document).ready(function () {
    var sum = 0;
    $('#MainContent_gvOrders > tbody > tr > td .col1').each(function () {
        if ($(this).closest('tr').has('input:not(:checked)')[0]) {
            sum += parseInt($(this).text(), 10);
        }
    });
    $('#tp').html(sum);
});
Mr_Green
  • 40,727
  • 45
  • 159
  • 271
  • 1
    Alternatively you can check the .length property on the returned object. – rlemon Sep 04 '13 at 12:29
  • @rlemon yeah I was checking this [link](http://stackoverflow.com/q/31044/1577396) and accidentally got this post.. :D – Mr_Green Sep 04 '13 at 12:30
0

Here is HTML:

    <div>
    <table class="bordered striped hovered" cellspacing="0" rules="all" border="1" id="MainContent_gvOrders" style="border-collapse:collapse;">
        <tr>
            <th scope="col">&nbsp;</th><th scope="col">Заказ</th><th scope="col">Pax</th><th scope="col">Child</th><th scope="col">PickUpTime</th><th scope="col">Скидка</th><th scope="col">Продал</th><th scope="col">Транспорт</th><th scope="col">Отмен</th><th scope="col">Причина</th><th scope="col">WhenSold</th><th scope="col">Price</th><th scope="col">Net</th><th scope="col">PriceChd</th><th scope="col">NetChd</th><th scope="col">TotalPrice</th><th scope="col">TotalNet</th>
        </tr><tr>
            <td><input type="image" src="../img/edit.png" alt="Edit" onclick="javascript:__doPostBack(&#39;ctl00$MainContent$gvOrders&#39;,&#39;Edit$0&#39;);return false;" /></td><td>Aphrodita VIP 03 Sep 2013</td><td>
                    <span id="MainContent_gvOrders_Label4_0">1</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label5_0">0</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label11_0"></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label12_0">0</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label1_0">Igor</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label13_0">0</span>
                </td><td>
                    <span class="aspNetDisabled"><input id="MainContent_gvOrders_cbCancel_0" type="checkbox" name="ctl00$MainContent$gvOrders$ctl02$cbCancel" checked="checked" disabled="disabled" /></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label14_0"></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label6_0"></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label7_0">800</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label8_0">380</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label9_0">600</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label10_0">350</span>
                </td><td class="col1">
                    <span id="MainContent_gvOrders_Label2_0" class="col1">800</span>
                </td><td class="col2">
                    <span id="MainContent_gvOrders_Label3_0" class="col2">380</span>
                </td>
        </tr><tr>
            <td><input type="image" src="../img/edit.png" alt="Edit" onclick="javascript:__doPostBack(&#39;ctl00$MainContent$gvOrders&#39;,&#39;Edit$1&#39;);return false;" /></td><td>Flying Hanuman (B) 02 Sep 2013</td><td>
                    <span id="MainContent_gvOrders_Label4_1">1</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label5_1">0</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label11_1"></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label12_1">0</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label1_1">Igor</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label13_1">0</span>
                </td><td>
                    <span class="aspNetDisabled"><input id="MainContent_gvOrders_cbCancel_1" type="checkbox" name="ctl00$MainContent$gvOrders$ctl03$cbCancel" disabled="disabled" /></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label14_1"></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label6_1"></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label7_1">3250</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label8_1">2200</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label9_1">3250</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label10_1">2200</span>
                </td><td class="col1">
                    <span id="MainContent_gvOrders_Label2_1" class="col1">3250</span>
                </td><td class="col2">
                    <span id="MainContent_gvOrders_Label3_1" class="col2">2200</span>
                </td>
        </tr><tr>
            <td><input type="image" src="../img/edit.png" alt="Edit" onclick="javascript:__doPostBack(&#39;ctl00$MainContent$gvOrders&#39;,&#39;Edit$2&#39;);return false;" /></td><td>Khao Lak 05 Sep 2013</td><td>
                    <span id="MainContent_gvOrders_Label4_2">1</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label5_2">0</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label11_2">7:15</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label12_2">0</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label1_2">Igor</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label13_2">0</span>
                </td><td>
                    <span class="aspNetDisabled"><input id="MainContent_gvOrders_cbCancel_2" type="checkbox" name="ctl00$MainContent$gvOrders$ctl04$cbCancel" disabled="disabled" /></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label14_2"></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label6_2"></span>
                </td><td>
                    <span id="MainContent_gvOrders_Label7_2">2700</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label8_2">1500</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label9_2">1800</span>
                </td><td>
                    <span id="MainContent_gvOrders_Label10_2">1300</span>
                </td><td class="col1">
                    <span id="MainContent_gvOrders_Label2_2" class="col1">2700</span>
                </td><td class="col2">
                    <span id="MainContent_gvOrders_Label3_2" class="col2">1500</span>
                </td>
        </tr><tr>
            <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>
                    <span id="tp"></span>
                </td><td>
                    <span id="tn"></span>
                </td>
        </tr>
    </table>
</div>

This markup generted by asp.net gridview control.

andrey.shedko
  • 3,128
  • 10
  • 61
  • 121
  • so here is what i understand....you want to sum the span text if checkbox inside first td is not checked...right.? – Dipesh Parmar Sep 05 '13 at 05:50
  • Well. we have tr with few td. We need last two, that contain total price and total net. In footer we have span #tp and #tn that should contain subtotal of the columns with .col1 and .col2. But I would like to skip tr that contains checked input. In this html it's first tr with checked input. Because I need td that contain class, I did modified your code a bit as follow: sum += parseInt($(this).find('td.col2').text(), 10); – andrey.shedko Sep 05 '13 at 05:54
  • Beuatiful solution! Thanks @Dipesh Parmar! – andrey.shedko Sep 05 '13 at 06:35
0

Finally, I found solution.

<script type="text/javascript">
        $(document).ready(function () {
            var sum = 0;
            $('#MainContent_gvOrders  tr:has(:checkbox:not(:checked))').filter(function () {
                sum += parseInt($(this).find('td.col1').text(), 10);
                });
            $('#tp').html(sum);
        });
        function pageLoad(sender, args) {
            var sum = 0;
            $('#MainContent_gvOrders  tr:has(:checkbox:not(:checked))').filter(function () {
               sum += parseInt($(this).find('td.col1').text(), 10);
            });
            $('#tp').html(sum);
        }
    </script>
andrey.shedko
  • 3,128
  • 10
  • 61
  • 121