Cita:
Iniciado por Alexis88 No es necesario que concatenes el valor de $i
al nombre de la clase, pues esta sí puede repetirse, lo que no puede suceder con el id
.
En realidad lo hice para tener control de los elementos del formulario, solo por cuestión de usar los mismos en otro PHP que hace otra función... Claro que a la clase no le puse el id...
Cita:
Iniciado por Alexis88 Cada checkbox:
Código Javascript
:
Ver originalfunction sumar(){
var checks = document.querySelectorAll(":checked"),
total = checks.length,
suma = 0;
for (var i = 0; i < total; i++){
var celda = checks[i].parentNode,
fila = celda.parentNode,
monto = fila.querySelector(".monto_cuota_lin").innerHTML;
monto = Number(monto.replace(",", ""));
suma += monto;
}
alert(suma);
}
Muy buena tu explicación y la demo funciona de maravillas. La única diferencia es que yo tenia los elementos dentro de input en un formulario y tu directamente como texto. Para ese caso replique lo que me muestras, saque mi input y le asigné la clase al <td>. El script de javascript lo pase al final de la página tal cual está tu ejemplo, pero aún así no hace nada. Con un debug muy sencillo que tengo sobre mi Mozilla me muestra el siguiente error.
Código:
TypeError: fila.querySelector(...) is null
Y claro no me muestra el alert(suma);
Intenté con esto también
document.getElementById("total_cuota").value=suma;
Y nada... me fije que tu pagina hace referencias a elementos externos, los puse y nada tampoco. Eliminé de hecho todos los elementos javascript que apuntaban a otros archivos externos y lo dejé lo más simple posible, y no funciona.
Te comparto toda la pagina PHP para vean todo mi codigo.
Código PHP:
<?php
include "inc/cnf.php";
include "inc/func.php";
?>
<html>
<head>
<title>Sisterma de Reportes</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<!--script type="text/javascript" src="js/jquery.js"></script-->
<script type="text/javascript">
function abrir(url) {
open(url,'printing','');
}
</script>
<style type="text/css">
input, select, table {
height: 20px;
font-size: 10px;
font-weight: bold;
font-family: arial;
color: black;
margin: 0;
padding: 0pt;
float: none;
vertical-align: middle;
}
</style>
</head>
<body>
<div align="center" style="font-size: 14px; font-family: arial;">
<b>Simulador de Intereses</b>
<table width="100%" style="font-size: 12px;">
<tr>
<td align="center" width="50%">
<form method="post" action="">
RUC: <input type="text" name="cedula" size="10" /><br />
Empresa: <select name="empresa">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select><br />
<input type="submit" name="submit" value="Comenzar" /><br />
<input type="button" name="sim_libre" value="Simulador Libre" onclick="abrir('sim_libre.php');" />
</form>
</td>
<td width="50%">
<?php
if (@$_POST["submit"]) {
if ($_POST["cedula"] && $_POST["empresa"]) {
$base = $_POST["empresa"];
$ci = $_POST["cedula"];
mssql_select_db($base);
$tasa = getTasa();
//Primero buscamos que el cliente exista en la BD y que tenga
//Prestamo o Financiación
$sql_found = "SELECT xxxx FROM xxxx WHERE NNN LIKE '".$ci."'";
$que_found = mssql_query($sql_found);
$row_found = mssql_fetch_assoc($que_found);
echo "Nombre: ".$row_found["Nombre_Apellido"]."<br />";
if ($row_found["Moneda"] == "GS") {
echo "Balance: ".$row_found["Moneda"]." ".number_format($row_found["BalanceGS"],0,".",",")."<br />";
} else {
echo "Balance: ".$row_found["Moneda"]." ".number_format($row_found["BalanceUS"],2,".",",")."<br />";
}
echo "Ruc: ".$row_found["Ruc"]."<br />";
//Ahora tocaría buscar los prestamos activos
//Para ello miramos las facturas ND
$sql_dn = "SELECT xxxx FROM xxxx WHERE NNN NOT IN ('Y', 'C') AND MMM = 'DN' AND OOO NOT IN ('C') AND PPP = '".$row_found["Codigo"]."'";
$que_dn = mssql_query($sql_dn);
?>
</td>
</tr>
</table>
<hr />
<table width="100%">
<tr>
<td align="center">
<table border="1" cellspacing="0" cellpading="0">
<tr bgcolor="00D1FF">
<th>No. Factura</th>
<th>Stock</th>
<th>Monto</th>
<th>Cuotas</th>
<th>Fecha Otorgado</th>
<th>Fecha Vencimiento</th>
<th>Moneda</th>
<th>Ver</th>
</tr>
<?php
while($row_dn = mssql_fetch_assoc($que_dn)) {
$zzz[] = $row_dn['xxx'];
?>
<tr>
<td><?=$row_dn["No_Factura"]?></td>
<td><?=$row_dn["Stock"]?></td>
<td align="right">
<?php
if ($row_dn["Moneda"] == "GS") {
echo number_format($row_dn["MontoGS"],0,".",",");
} else {
echo number_format($row_dn["MontoUS"],2,".",",");
} ?>
</td>
<td align="center"><?=$row_dn["Cuotas"]?></td>
<td align="center"><?=$row_dn["Fecha_Otorgado"]?></td>
<td align="center"><?=$row_dn["Fecha_Vencimiento"]?></td>
<td><?=$row_dn["Moneda"]?></td>
<td><a href="estado.php?id=<?=$row_dn['xxx']?>&bd=<?=$base?>&mo=<?=$row_dn['Moneda']?>" target="_blank">Detalle</a></td>
</tr>
<?php } //Cierra el While de Facturas ?>
</table>
</td>
<td>
<table border="0">
<tr valign="top">
<td>Capital:</td>
<td><input type="text" id="total_cuota" /></td>
</tr>
<tr valign="top">
<td>Total de Interés:</td>
<td><input type="text" id="total_interes" /></td>
</tr>
<tr valign="middle">
<td><input type="checkbox" id="honorarios" /> Honorarios Judiciales 10%:</td>
<td><input type="text" id="total_honorarios" /></td>
</tr>
<tr valign="top">
<td>Total a Pagar:</td>
<td><input type="text" id="total_pagar" /></td>
</tr>
</table>
</td>
</tr>
</table>
<br />
<table border="1" cellspacing="0" cellpading="0" width="100%">
<tr bgcolor="00D1FF">
<th>Selec.</th>
<th>No. Cuota</th>
<th>Stock</th>
<th>Fecha Vto.</th>
<th>Fecha Pago</th>
<th>Dias de Diferencia</th>
<th>Monto Cuota</th>
<th>Monto Interés</th>
<th>Total a Pagar</th>
</tr>
<?php
//Ahora armamos todas las cuotas pendientes del cliente.
//Primero convertimos a texto separados por , los miembros del Array
$de = implode(",", $zzzz);
$sql_dat = "SELECT xxxxx FROM xxxxx WHERE NNN IN (".$de.") AND MMM NOT IN ('C') ORDER BY OOO ASC";
$que_dat = mssql_query($sql_dat);
$i = 0; //A modo de nomenclatura
while($row_dat = mssql_fetch_assoc($que_dat)) { $i++; ?>
<tr align="center">
<td><input type="checkbox" onclick="sumar()" /></td>
<td><input type="text" id="cuota_lin<?=$i?>" value="<?=$row_dat['Id_Cuota']?>" size="2" disabled="disabled" /></td>
<td><input type="text" id="stock_lin<?=$i?>" value="<?=$row_dat["Stock"]?>" size="6" disabled="disabled" /></td>
<td><input type="text" id="vcto_lin<?=$i?>" value="<?=$row_dat["Fecha_Vto"]?>" size="10" disabled="disabled" /></td>
<td><input type="text" id="hoy_lin<?=$i?>" value="<?=date("d/m/Y")?>" size="10" disabled="disabled" /></td>
<?php
//Sacamos la diferencia de dias
$vcto = UnfixDate($row_dat["Fecha_Vto"]);
$fec_pago = UnfixDate(date("d/m/Y"));
$dias_dif = (strtotime($fec_pago)-strtotime($vcto))/86400;
$dias_dif = floor($dias_dif);
?>
<td><input type="text" id="diasdif_lin<?=$i?>" value="<?=$dias_dif?>" size="4" disabled="disabled" /> días</td>
<?php if ($row_dat["Moneda"] == "GS") {
$monto_cuota = number_format($row_dat["CuotaGS"],0,".",",");
} else {
$monto_cuota = number_format($row_dat["CuotaUS"],2,".",",");
} ?>
<td class="monto_cuota_lin"><?=$monto_cuota?></td>
<?php
//Definimos los interes
$int_3 = 0.1;
$int_1 = 0.033;
//Hacemos calculos de interes
//Para 3%
if ($dias_dif < 0) { //O sea es negativo se escoge el 1%
$porc = $dias_dif * $int_1;
} else {
$porc = $dias_dif * $int_3;
}
//Sacamos calculo para el monto del Interes
if ($row_dat["Moneda"] == "GS") { $elemento = "CuotaGS";
} else { $elemento = "CuotaUS"; }
$monto_int = $row_dat[$elemento]*$porc/100;
//Ahora calculamos el Monto a Pagar
$pago = $row_dat[$elemento]+$monto_int;
if ($row_dat["Moneda"] == "GS") {
$monto_int = number_format($monto_int,0,".",",");
} else {
$monto_int = number_format($monto_int,2,".",",");
}?>
<td><input type="text" id="monto_int_lin" value="<?=$monto_int?>" size="6" disabled="disabled" /></td>
<?php
if ($row_dat["Moneda"] == "GS") {
$monto_pago = number_format($pago,0,".",",");
} else {
$monto_pago = number_format($pago,2,".",",");
}?>
<td><input type="text" id="pago_lin<?=$i?>" value="<?=$monto_pago?>" size="10" disabled="disabled" /></td>
</tr>
<?php } //Cierra el While de los pendientes ?>
</table>
</td>
</tr>
</table>
<?php
} else { echo "<b>Debe ingresar los datos que se piden</b><br />"; }
} ?>
</div>
<script>
function sumar(){
var checks = document.querySelectorAll(":checked"),
total = checks.length,
suma = 0;
for (var i = 0; i < total; i++){
var celda = checks[i].parentNode,
fila = celda.parentNode,
monto = fila.querySelector(".monto_cuota_lin").innerHTML;
monto = Number(monto.replace(",", ""));
suma += monto;
}
alert(suma);
}
</script>
</body>
</html>
La idea es que cada vez que se escoja un checkbox de una fila en la tablita superior, se calculen en el input de total de cuotas, el monto_coutas_lin; después el monto_int_lin en el input de total de interes. Y por ultima hacer una suma entre los elementos total_cuota + total_interes. Pero haciendolo con uno, lo logro con los demás.
Gracias de antemano.