Ver Mensaje Individual
  #3 (permalink)  
Antiguo 23/10/2014, 06:04
dgrvedado
 
Fecha de Ingreso: diciembre-2010
Ubicación: Asunción
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Calculo por Seleccion de Checkbox (No dinámico/No estático)

Cita:
Iniciado por Alexis88 Ver Mensaje
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 Ver Mensaje
Cada checkbox:
Código HTML:
Ver original
  1. <input type = "checkbox" onclick = "sumar()" />

Código Javascript:
Ver original
  1. function sumar(){
  2.     var checks = document.querySelectorAll(":checked"),
  3.         total = checks.length,
  4.         suma = 0;
  5.     for (var i = 0; i < total; i++){
  6.         var celda = checks[i].parentNode,
  7.             fila = celda.parentNode,
  8.             monto = fila.querySelector(".monto_cuota_lin").innerHTML;
  9.         monto = Number(monto.replace(",", ""));
  10.         suma += monto;
  11.     }
  12.     alert(suma);
  13. }
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.