<!DOCTYPE html>
<html>
<head>
<style>
.monto {text-align:right;}
.totales {font-weight:bold;}
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>producto</th>
<th>Precio por unidad</th>
<th>Cantidad</th>
<th>Precio por producto</th>
</tr>
</thead>
<tbody>
<tr>
<td>
Producto A
</td>
<td>
<input type="number" class="monto input" value="22.50">
</td>
<td>
<input type="number" class="monto input">
</td>
<td>
<input type="text" class="monto total" value="0" disabled>
</td>
</tr>
<tr>
<td>
Producto B
</td>
<td>
<input type="number" class="monto input" value="7.00">
</td>
<td>
<input type="number" class="monto input">
</td>
<td>
<input type="text" class="monto total" value="0" disabled>
</td>
</tr>
<tr>
<td>
Producto C
</td>
<td>
<input type="number" class="monto input" value="30.12">
</td>
<td>
<input type="number" class="monto input">
</td>
<td>
<input type="text" class="monto total" value="0" disabled>
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
Total
</td>
<td>
<input type="text" class="monto totales" value="0" disabled>
</td>
</tr>
</tbody>
</table>
</body>
</html>
<script>
// generamos un evento click y keyup para cada elemento input con la clase .input
var input=document.querySelectorAll(".input");
input.forEach(function(e) {
e.addEventListener("click",multiplica);
e.addEventListener("keyup",multiplica);
});
// funcion que genera la multiplicacion
function multiplica() {
// nos posicionamos en el tr del producto
var tr=this.closest("tr");
var total=1;
// recorremos todos los elementos del tr que tienen la clase .input
var inputs=tr.querySelectorAll(".input");
inputs.forEach(function(e) {
total*=e.value;
});
// mostramos el total con dos decimales
tr.querySelector(".total").value=total.toFixed(2);
// indicamos que calcule el total
calcularTotal(this.closest("table"));
}
// funcion que calcula la suma total de los productos
function calcularTotal(e) {
var total=0;
// obtenemos todos los totales y los sumamos
var totales=e.querySelectorAll(".total");
totales.forEach(function(e) {
total+=parseFloat(e.value);
});
// mostramos la suma total con dos decimales
e.getElementsByClassName("totales")[0].value=total.toFixed(2);
}
</script>
Comentarios sobre la versión: Versión 1 (3)
Es decir el total es en realidad un subtotal al que se calcula el 16% del iva , otros descuentos y por fin al final obtenemos el total real.
Agradezco la atención.