Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Suma condicional

Estas en el tema de Suma condicional en el foro de Javascript en Foros del Web. Tengo un formulario con 100 campos en una tabla, 50 son de diferentes bancos, y los otros 50 corresponden a sus respectivos depositos, quisiera saber ...
  #1 (permalink)  
Antiguo 16/12/2014, 13:39
 
Fecha de Ingreso: octubre-2014
Mensajes: 63
Antigüedad: 9 años, 6 meses
Puntos: 0
Suma condicional

Tengo un formulario con 100 campos en una tabla, 50 son de diferentes bancos, y los otros 50 corresponden a sus respectivos depositos, quisiera saber como hacer que en javascript sume al momento (onKeyup) las cantidades que se ingresan, pero por banco! Algo así como por ejemplo una suma agrupada en mysql.

Ejemplo:
banamex 50
bancomer 100
hsbc 300
banamex 30
bancomer 80
hsbc 10
------------------------------------
totales:
banamex 80
bancomer 180
hsbc 310

De antemano muchas gracias!!!!
  #2 (permalink)  
Antiguo 16/12/2014, 16:00
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Suma condicional

Puedes declarar arrays

<?
$puntos[] = array('banco' => 'Banamex', 'monto' => 50);
$puntos[] = array('banco' => 'Banamex', 'monto' => 30);
$puntos[] = array('banco' => 'hsbc', 'monto' => 100);
$puntos[] = array('banco' => 'hsbc', 'monto' => 80);
foreach ($puntos as $key => $row) {
if($row['banco']=="Banamex"){
$sumaBanamex+= $row['monto'];
}elseif($row['banco']=="hsbc"){
$sumaHsbc+= $row['monto'];
}
}
echo $sumaBanamex."<br />";
echo $sumaHsbc."<br />";

?>
  #3 (permalink)  
Antiguo 16/12/2014, 16:43
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Suma condicional

Hola:

Cita:
Iniciado por petezajot Ver Mensaje
Tengo un formulario con 100 campos en una tabla, 50 son de diferentes bancos, y los otros 50 corresponden a sus respectivos depositos...
Lo que deberías mostrar es la estructura del formulario, porque si el nombre de los campos son los bancos y sus values los depósitos (creo que es coherente), la respuesta casi sería trivial, pero no termino de imaginarme ese formulario...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 16/12/2014, 18:11
 
Fecha de Ingreso: octubre-2014
Mensajes: 63
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Suma condicional

Cita:
Iniciado por caricatos Ver Mensaje
Hola:



Lo que deberías mostrar es la estructura del formulario, porque si el nombre de los campos son los bancos y sus values los depósitos (creo que es coherente), la respuesta casi sería trivial, pero no termino de imaginarme ese formulario...

Saludos

es cierto, este es el código:
Código HTML:
Ver original
  1. <select name="banco_txt" id="banco_txt" style="width:105;">
  2.  <option value="" selected></option>
  3.                                        <option value="Afirme">Afirme</option>
  4.                                         <option value="Bajio">Bajio</option>
  5.                                         <option value="Banamex">Banamex</option>
  6.                                         <option value="Banco Azteca">Banco Azteca</option>
  7.                                         <option value="Banco Walmart">Banco Walmart</option>
  8.                                         <option value="Banorte">Banorte</option>
  9.                                         <option value="Banregio">Banregio</option>
  10.                                         <option value="BBVA Bancomer">BBVA Bancomer</option>
  11.                                         <option value="Coppel">Coppel</option>
  12.                                         <option value="HSBC">HSBC</option>
  13.                                         <option value="Inbursa">Inbursa</option>
  14.                                         <option value="IXE">IXE</option>
  15.                                         <option value="Mifel">Mifel</option>
  16.                                         <option value="Santander">Santander</option>
  17.                                         <option value="Scotiabank">Scotiabank</option>
  18.                                     </select></td>
Este rubro es de donde obtengo el dato del banco.
Código HTML:
Ver original
  1. <input type="text" name="monto1">
y este de donde obtengo la cantidad, estan en una tabla, hay 50 para elegir banco y 50 para ingresar el monto. lo que quisiera es que en javascript, así como se elige un banco y se ingrese un monto, los sume entre si.

Última edición por petezajot; 16/12/2014 a las 18:16
  #5 (permalink)  
Antiguo 17/12/2014, 12:20
 
Fecha de Ingreso: octubre-2014
Mensajes: 63
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Suma condicional

Es como usar "SUMAR.SI()" en EXCEL
  #6 (permalink)  
Antiguo 17/12/2014, 12:39
 
Fecha de Ingreso: octubre-2014
Mensajes: 63
Antigüedad: 9 años, 6 meses
Puntos: 0
suma condicional2

Teniendo claro como funciona una fórmula con "SUMAR.SI" en EXCEL, pregunto:
es posible aplicarla en una página web con javaScript? Eh buscado mucho y no encuentro absolutamente nada, empiezo a perder las esperanzas. Detallo mi necesidad:
tengo un formulario en mi web, en este hay una tabla en la que hay 100 etiquetas, 50 en una columna y 50 en la columna contigua, en la primer columna todos mis select están así:
Código HTML:
Ver original
  1. <select name="banco_txt" id="banco_txt" style="width:105;">
  2. <option value="" selected></option>
  3. <option value="Afirme">Afirme</option>
  4. <option value="Bajio">Bajio</option>
  5. <option value="Banamex">Banamex</option>
  6. <option value="Banco Azteca">Banco Azteca</option>
  7. <option value="Banco Walmart">Banco Walmart</option>
  8. <option value="Banorte">Banorte</option>
  9. <option value="Banregio">Banregio</option>
  10. <option value="BBVA Bancomer">BBVA Bancomer</option>
  11. <option value="Coppel">Coppel</option>
  12. <option value="HSBC">HSBC</option>
  13. <option value="Inbursa">Inbursa</option>
  14. <option value="IXE">IXE</option>
  15. <option value="Mifel">Mifel</option>
  16. <option value="Santander">Santander</option>
  17. <option value="Scotiabank">Scotiabank</option>
Y en la segunda columna tengo campos input en los que ingreso el monto a depositar a cada banco.
Código HTML:
Ver original
  1. <input type="text" name="deposito1">
Lo compare con "SUMAR.SI" de EXCEL ya que es la forma más fácil de explicarlo, quiero que básicamente sume las cantidades del input segun el valor que haya en el select y obtener algo así:
SELECT
banamex - 50
bancomer - 20
hsbc - 30
banamex - 25
bancomer - 15
hsbc - 55
----------------------------------
Totales:
banamex - 75
bancomer - 35
hsbc - 85

De igual manera quiero ejecutar este javascript en un evento, ya sea onKeyup u onKeypress.
De antemano agradezco mucho su apoyo y espero sea factible lo que trato de hacer!
  #7 (permalink)  
Antiguo 17/12/2014, 19:10
Avatar de 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 */
  #8 (permalink)  
Antiguo 18/12/2014, 13:24
 
Fecha de Ingreso: octubre-2014
Mensajes: 63
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Suma condicional

Funciona perfectisimo! Muchas gracias, me acabas de salvar la vida!!!!!

Etiquetas: condicional, formulario, funcion, input, select, suma, tabla, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:21.