Reputation: 323
I want to get total amount when I change quantity.
This script is not working in while loop: (quantity * amount = total_amount)
How can I solve this issue? Please help me to solve this issue.
function calculateTotal() {
var totalAmt = document.addem.total.value;
totalR = eval(totalAmt * document.addem.tb1.value);
document.getElementById('total_amount').innerHTML = totalR;
}
<table>
<tr>
<td>Id</td>
<td>Product</td>
<td>Quantity</td>
<td>Total</td>
</tr>
<tr>
<?php
$sq=mysql_query("select * from cart_sample where email='$ema'");
while($row = mysql_fetch_array($sq))
{ ?>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['product']; ?></td>
<form name="addem" id="addem" />
<td><input type="text" name="tb1" onkeyup="calculateTotal()" value="<?php echo $row['quantity']; ?>" /></td>
<input type="hidden" name="total" value="<?php echo $row['amount']; ?>" />
<td><span id="total_amount"></span></td>
<?php } ?> </tr>
</table>
Upvotes: 4
Views: 8525
Reputation: 67525
Since you're using jquery you could avoid the inline event and give your inputs a general classes then create an event for all inputs :
<input type="text" class='quantity' name="tb1" onkeyup="calculateTotal()" value="<?php echo $row['quantity']; ?>" />
<input type="hidden" class='total' name="total" value="<?php echo $row['amount']; ?>" />
<span class="total_amount"></span>
JS :
$('.quantity').on('input', function(){
var form = $(this).closest('form');
var totalAmt = parseInt(form.find('.total').val());
var quantity = parseInt($(this).val());
form.find('.total_amount').text(totalAmt*quantity);
})
NOTE : The form should be inside same td
.
Hope this helps.
$('.quantity').on('input', function(){
var form = $(this).closest('form');
var totalAmt = parseInt(form.find('.total').val());
var quantity = parseInt($(this).val());
form.find('.total_amount').text(totalAmt*quantity);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<input type="text" class='quantity' name="tb1" value="1" />
<input type="hidden" class='total' name="total" value="10" />
<span class="total_amount">10</span>
</form>
<form>
<input type="text" class='quantity' name="tb1" value="2" />
<input type="hidden" class='total' name="total" value="10" />
<span class="total_amount">20</span>
</form>
<form>
<input type="text" class='quantity' name="tb1" value="3" />
<input type="hidden" class='total' name="total" value="10" />
<span class="total_amount">30</span>
</form>
Without forms :
$('.quantity').on('input', function(){
var parent = $(this).closest('tr');
var totalAmt = parseInt(parent.find('.total').val());
var quantity = parseInt($(this).val());
parent.find('.total_amount').text(totalAmt*quantity);
calcul_total_quatities();
})
function calcul_total_quatities()
{
var total = 0;
$('.total_amount').each(function(){
total += parseInt( $(this).text() );
})
$('.total_all_amounts').text(total);
post_data_to_server($('.total_amount').val(),total);
}
function post_data_to_server(total_amount,total_all_amounts)
{
$.ajax({
type: 'post',
url: 'your_page.php',
data: {
total_amount: total_amount,
total_all_amounts: total_all_amounts
},
success: function( data ) {
//'data' represent the message back from the PHP page
console.log( data );
}
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>Id</td>
<td>Product</td>
<td>Quantity</td>
<td>Total</td>
</tr>
<tr>
<td>ID</td>
<td>Product</td>
<td>
<input type="text" class='quantity' name="tb1" value="1" />
</td>
<td><input type="hidden" class='total' name="total" value="10" /></td>
<td><span class="total_amount">10</span></td>
</tr>
<tr>
<td>ID</td>
<td>Product</td>
<td>
<input type="text" class='quantity' value="2" />
</td>
<td><input type="hidden" class='total' value="10" /></td>
<td><span class="total_amount">20</span></td>
</tr>
<tr>
<td>ID</td>
<td>Product</td>
<td>
<input type="text" class='quantity' value="3" />
</td>
<td><input type="hidden" class='total' value="10" /></td>
<td><span class="total_amount">30</span></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td><span class="total_all_amounts">60</span></td>
</tr>
</table>
Upvotes: 2
Reputation: 4321
use jquery just add script tag at the top of your page
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
and at the bottom of page before </body>
<script type="text/javascript">
function calculateTotal() {
var totalAmount = 0;
$('#addem').find('input').each(function(){
totalAmount += parseInt($(this).val()); //convert to integer so sum can be done correctly.
});
$('#total_amount').html(totalAmount);
}
</script>
Upvotes: -1