Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
121
rated 0 times [  125] [ 4]  / answers: 1 / hits: 15329  / 12 Years ago, fri, august 3, 2012, 12:00:00

I want to calculate each row's total price by multiplying individual row's inputs and then finally calculate a grand total by adding all the total values of the Total column using JQuery. I am only getting the first row to display total when I enter values. Any help will be greatly appreciated.



     <script type=text/C# src=https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js></script>
<script type=text/javascript>
$(document).ready(function () {
$(.txtMult).each(function () {
$(this).keyup(function () {
multInputs();
});
});
});

function multInputs() {
var mult = 0;
$(.txtMult).each(function () {
var $val1 = $('#val1').val();
var $val2 = $('#val2').val();
var $total = ($val1 * 1) * ($val2 * 1)
$('#multTotal').text($total);
});
}

</script>
@using (@Html.BeginForm())
{
<table>
<tr>
<th>
Quanity
</th>
<th>
Unit Price
</th>
<th>
Total
</th>
</tr>
@for (int i=0; i < 5; i++)
{

<tr>
<td>
<input class =txtMult name=txtEmmail id=val1 />
</td>
<td>
<input class =txtMult name=txtEmmail id=val2/>
</td>
<td>
<span id=multTotal>0.00</span>
</td>
</tr>

}
<tr>
<td colspan=3 align=right>
Grand Total# <span id=grandTotal>0.00</span>
</td>
</tr>
</table>
}


enter


More From » jquery

 Answers
17

Your html is invalid: the id attribute is supposed to be unique but you are repeating the same three ids in every row. The easiest way to fix this is to change your inputs to have class=val1 and class=val2 instead of id=val1 and `id=val2, and change your row total to have class=multTotal. I'd also move the txtMult class to each of the tr elements with the inputs in them, for ease of selecting those rows:



        <tr class=txtMult>
<td>
<input name=txtEmmail class=val1 />
</td>
<td>
<input name=txtEmmail class=val2/>
</td>
<td>
<span class=multTotal>0.00</span>
</td>
</tr>


...and then change the selector in your jQuery code to select by class in the context of the current row. Note also that you don't need an .each() loop to bind the .keyup() handlers to the elements that match your selector, just use $(someselector).keyup():



 $(document).ready(function () {
$(.txtMult input).keyup(multInputs);

function multInputs() {
var mult = 0;
// for each row:
$(tr.txtMult).each(function () {
// get the values from this row:
var $val1 = $('.val1', this).val();
var $val2 = $('.val2', this).val();
var $total = ($val1 * 1) * ($val2 * 1);
// set total for the row
$('.multTotal', this).text($total);
mult += $total;
});
$(#grandTotal).text(mult);
}
});


Working demo: http://jsfiddle.net/nnnnnn/5FpWC/


[#83882] Thursday, August 2, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
tristab

Total Points: 735
Total Questions: 106
Total Answers: 96

Location: Grenada
Member since Sun, Dec 20, 2020
3 Years ago
tristab questions
Sat, Sep 25, 21, 00:00, 3 Years ago
Sun, Jan 31, 21, 00:00, 3 Years ago
Wed, Dec 2, 20, 00:00, 4 Years ago
Fri, Oct 23, 20, 00:00, 4 Years ago
;