Ver Mensaje Individual
  #7 (permalink)  
Antiguo 17/12/2014, 19:10
Avatar de America|UNK
America|UNK
 
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: Suma condicional

No pierdas las esperanzas porque todo los cálculos que se pueden hacer en Excel los puedes hacer en Javascript y de diferentes formas, al gusto tuyo incluso...

Primeramente no se si todo el HTML lo generas a través de PHP o lo ingresas como HTML completo. si tienes todos los 50 campos en un solo texto HTML hay muchas soluciones para reducir código y también lo puedes conseguir con Javascript, en este ejemplo solo te he reducido los nombres de los bancos en cada campo y no es necesario enumerar nada como deposito_1, deposito_2..., porque todo lo puedes reducir usando bucles y arreglos.

El HTML (antes del código Javascript)

Código HTML:
Ver original
  1. <form name="banks_deposits">
  2.     <table>
  3.         <tr> <td><select name="banco[]"></select></td> <td><input type="text" name="deposito[]" value="0" /></td> </tr>
  4.         <tr> <td><select name="banco[]"></select></td> <td><input type="text" name="deposito[]" value="0" /></td> </tr>
  5.         <tr> <td><select name="banco[]"></select></td> <td><input type="text" name="deposito[]" value="0" /></td> </tr>
  6.         <tr> <td><select name="banco[]"></select></td> <td><input type="text" name="deposito[]" value="0" /></td> </tr>
  7.         <tr> <td><select name="banco[]"></select></td> <td><input type="text" name="deposito[]" value="0" /></td> </tr>
  8.         <tr> <td><select name="banco[]"></select></td> <td><input type="text" name="deposito[]" value="0" /></td> </tr>
  9.     </table>
  10.     <pre id="result"></pre>
  11. </form>

Javascript:

Código Javascript:
Ver original
  1. var banks = {"~": 0, "Bajio": 0, "Banamex": 0, "Banco Azteca": 0, "Banco Walmart": 0, "Banorte": 0,
  2.  "Banregio": 0, "BBVA Bancomer": 0, "Coppel": 0, "HSBC": 0, "Inbursa": 0, "IXE": 0, "Mifel": 0, "Santander": 0, "Scotiabank": 0};
  3. var form = document.forms.banks_deposits;
  4. var selects = form["banco[]"];
  5. var deposit_fields = form["deposito[]"];
  6.  
  7. //muestra resultado
  8. var result = function(){
  9.     var html_result = [];
  10.     for(var j in banks) html_result.push(j == '~' ? '' : j + ' : ' + banks[j]);
  11.     document.getElementById("result").innerHTML = "Totales: <br />" + html_result.join("<br />");
  12. }
  13.  
  14. //actualizar cantidad de cada banco, sumar los valores de cada campo
  15. var update = function(){
  16.     for(var j in banks){
  17.         var x = 0, field;
  18.         banks[j] = 0;
  19.        
  20.         while(field = deposit_fields[x])
  21.             if(selects[x++].value == j) banks[j] += +field.value;
  22.     }
  23.     result()
  24. };
  25.  
  26. //armamos todo, recorremos todos los campos
  27. for(var i=0; i < deposit_fields.length; i++){
  28.    
  29.     //crea la lista de bancos para cada campo, asi mantenemos ordenado y evitamos el exceso de código HTML
  30.     var optionsHTML = '';
  31.     for(var j in banks) optionsHTML += '<option value="'+j+'">'+j+'</option>';
  32.     selects[i].innerHTML = optionsHTML
  33.     ////
  34.    
  35.     //eventos para actualizar el total por cada cambio de banco o valor de depósito
  36.     selects[i].onchange = update
  37.     deposit_fields[i].onkeyup = update
  38.     deposit_fields[i].onchange = update
  39.     ////
  40. }
  41.  
  42. update();

Probar tu ejemplo (después de todo):

Código Javascript:
Ver original
  1. //TU EJEMPLO
  2. var z = 0;
  3. selects[z].value = "Banamex"; deposit_fields[z++].value = 50;
  4. selects[z].value = "BBVA Bancomer"; deposit_fields[z++].value = 100;
  5. selects[z].value = "HSBC"; deposit_fields[z++].value = 300;
  6. selects[z].value = "Banamex"; deposit_fields[z++].value = 30;
  7. selects[z].value = "BBVA Bancomer"; deposit_fields[z++].value = 80;
  8. selects[z].value = "HSBC"; deposit_fields[z++].value = 10;
  9.  
  10. //RESULTADO EJEMPLO
  11. update()

Aquí te dejé un demo para que lo pruebes: http://jsfiddle.net/wZVanG/wLa8wsg5/
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */