JavaScript - Suma condicional

   
Vista:
Imágen de perfil de Sergio

Suma condicional

Publicado por Sergio petezajot@hotmail.com (4 intervenciones) el 17/12/2014 16:50:11
Hola! Tengo una duda, Necesito realizar una suma condicional dinamicamente para un sitio web, quisiera ver si me pueden ayudar.
Tengo un formulario con 100 campos en una tabla, 50 son campos de selección para elegir bancos, y los otros 50 corresponden a sus respectivos depositos, quisiera saber como hacer que en javascript sume al momento las cantidades que se ingresan, pero por banco!
Ejemplo:
banamex 50
bancomer 100
hsbc 300
banamex 30
bancomer 80
hsbc 10
------------------------------------
totales:
banamex 80
bancomer 180
hsbc 310

De aquí selecciono el banco:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<select name="banco_txt" id="banco_txt" style="width:105;">
    <option value="" selected></option>
    <option value="Afirme">Afirme</option>
    <option value="Bajio">Bajio</option>
    <option value="Banamex">Banamex</option>
    <option value="Banco Azteca">Banco Azteca</option>
    <option value="Banco Walmart">Banco Walmart</option>
    <option value="Banorte">Banorte</option>
    <option value="Banregio">Banregio</option>
    <option value="BBVA Bancomer">BBVA Bancomer</option>
    <option value="Coppel">Coppel</option>
    <option value="HSBC">HSBC</option>
    <option value="Inbursa">Inbursa</option>
    <option value="IXE">IXE</option>
    <option value="Mifel">Mifel</option>
    <option value="Santander">Santander</option>
    <option value="Scotiabank">Scotiabank</option>
</select></td>

Y aquí ingreso los montos de depósito:
1
<input type="text" name="monto1">
Hay 50 campos select y 50 campos input (obviamente con distintos nombres) en el formulario.
lo que quisiera es que en javascript, así como se elige un banco y se ingrese un monto, los sume entre si siempre y cuando correspondan al mismo banco.
De antemano muchas gracias!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Suma condicional

Publicado por xve (1595 intervenciones) el 17/12/2014 18:57:05
Hola Sergio, revisa este código, que hace exactamente lo que solicitas, suma campos de un formulario...
http://lwp-l.com/s2278
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma condicional

Publicado por SERGIO GARCIA (4 intervenciones) el 17/12/2014 19:24:03
Es buena, solo que la suma depende del mismo valor que se ingrese en el campo, mi dolor de cabeza es que mi suma depende del valor seleccionado en el campo de "Bancos", si selecciono "Bancomer" en 5 de los 50 campos, los de adelante deben sumar sus montos en los que en el campo anterior diga "Bancomer" y devolverlos en vivo a un tercer campo. Es como si en excel utilizaras la fórmula "SUMAR.SI()".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Suma condicional

Publicado por xve (1595 intervenciones) el 17/12/2014 22:16:48
Hola Sergio, la verdad es que sin ver el código me es un poco difícil de poder ayudarte...

Entiendo que tendrás que hacer algún condicionante dependiendo de la selección, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma condicional

Publicado por SERGIO GARCIA petezajot@hotmail.com (4 intervenciones) el 17/12/2014 23:39:05
algo así, pero si es un poco complicado, lo eh querido resolver así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<html>
<head>
<script type="text/javascript">
function sumar() {
var bancoA=document.getElementById("banco1").value;
var bancoB=document.getElementById("banco2").value;
var bancoC=document.getElementById("banco3").value;
var bancoD=document.getElementById("banco4").value;
var valor1=document.getElementById("valor1").value;
var valor2=document.getElementById("valor2").value;
var valor3=document.getElementById("valor3").value;
var valor4=document.getElementById("valor4").value;
if (bancoA==bancoB){
endsum=parseFloat(valor1)+parseFloat(valor2);
final = document.getElementById('total').value = (endsum);
        document.getElementById('total').value = final;
}
if (bancoA==bancoB&&bancoA==bancoC&&bancoB==bancoC){
endsum=parseFloat(valor1)+parseFloat(valor2)+parseFloat(valor3);
final2 = document.getElementById('total').value = (endsum);
        document.getElementById('total').value = final2;
}
if (bancoA==bancoB&&bancoA==bancoC&&bancoA==bancoD&&bancoB==bancoC&&bancoB==bancoD&&bancoC==bancoD&&bancoB==bancoA&&bancoC==bancoA&&bancoC==bancoB){
endsum=parseFloat(valor1)+parseFloat(valor2)+parseFloat(valor3)+parseFloat(valor4);
final3 = document.getElementById('total').value = (endsum);
        document.getElementById('total').value = final3;
}
}
 
</script>
</head>
<body>
<h1>Suma de valores</h1>
<div>Banco 1:
<select name="banco1" id="banco1" style="width:105;">
<option value="" selected></option>
<option value="Afirme">Afirme</option>
<option value="Bajio">Bajio</option>
<option value="Banamex">Banamex</option>
<option value="Banco Azteca">Banco Azteca</option>
<option value="Banco Walmart">Banco Walmart</option>
<option value="Banorte">Banorte</option>
<option value="Banregio">Banregio</option>
<option value="BBVA Bancomer">BBVA Bancomer</option>
<option value="Coppel">Coppel</option>
<option value="HSBC">HSBC</option>
<option value="Inbursa">Inbursa</option>
<option value="IXE">IXE</option>
<option value="Mifel">Mifel</option>
<option value="Santander">Santander</option>
<option value="Scotiabank">Scotiabank</option>
</select>
</div>
<br>
<div>Banco 2:
<select name="banco2" id="banco2" style="width:105;">
<option value="" selected></option>
<option value="Afirme">Afirme</option>
<option value="Bajio">Bajio</option>
<option value="Banamex">Banamex</option>
<option value="Banco Azteca">Banco Azteca</option>
<option value="Banco Walmart">Banco Walmart</option>
<option value="Banorte">Banorte</option>
<option value="Banregio">Banregio</option>
<option value="BBVA Bancomer">BBVA Bancomer</option>
<option value="Coppel">Coppel</option>
<option value="HSBC">HSBC</option>
<option value="Inbursa">Inbursa</option>
<option value="IXE">IXE</option>
<option value="Mifel">Mifel</option>
<option value="Santander">Santander</option>
<option value="Scotiabank">Scotiabank</option>
</select>
</div>
<br>
<div>Banco 3:
<select name="banco3" id="banco3" style="width:105;">
<option value="" selected></option>
<option value="Afirme">Afirme</option>
<option value="Bajio">Bajio</option>
<option value="Banamex">Banamex</option>
<option value="Banco Azteca">Banco Azteca</option>
<option value="Banco Walmart">Banco Walmart</option>
<option value="Banorte">Banorte</option>
<option value="Banregio">Banregio</option>
<option value="BBVA Bancomer">BBVA Bancomer</option>
<option value="Coppel">Coppel</option>
<option value="HSBC">HSBC</option>
<option value="Inbursa">Inbursa</option>
<option value="IXE">IXE</option>
<option value="Mifel">Mifel</option>
<option value="Santander">Santander</option>
<option value="Scotiabank">Scotiabank</option>
</select>
</div>
<br>
<div>Banco 4:
<select name="banco4" id="banco4" style="width:105;">
<option value="" selected></option>
<option value="Afirme">Afirme</option>
<option value="Bajio">Bajio</option>
<option value="Banamex">Banamex</option>
<option value="Banco Azteca">Banco Azteca</option>
<option value="Banco Walmart">Banco Walmart</option>
<option value="Banorte">Banorte</option>
<option value="Banregio">Banregio</option>
<option value="BBVA Bancomer">BBVA Bancomer</option>
<option value="Coppel">Coppel</option>
<option value="HSBC">HSBC</option>
<option value="Inbursa">Inbursa</option>
<option value="IXE">IXE</option>
<option value="Mifel">Mifel</option>
<option value="Santander">Santander</option>
<option value="Scotiabank">Scotiabank</option>
</select>
</div>
<br>
<div>Monto 1: <input type="text" id="valor1"></div><br>
<div>Monto 2: <input type="text" id="valor2"></div><br>
<div>Monto 3: <input type="text" id="valor3"></div><br>
<div>Monto 4: <input type="text" id="valor4"></div><br>
 
<div>Total: <input type="text" id="total" readonly value="0">
	<input type="submit" Value="sumar" onClick="sumar();">
</body>
</html>
Pero aún hay algunas situacione sque no permiten que su ejecución sea óptima.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Suma condicional

Publicado por xve (1595 intervenciones) el 18/12/2014 12:24:43
Hola Sergio, ahora creo que lo he entendido, lo que no me queda claro es el total... intento explicar lo que he entendido

Según entiendo, quieres sumar todos los valores por cada banco, pero ejemplo, saber el total del Banco Afirme, Bajio, etc... y luego tener el total de todos, verdad...

Te he realizado una pequeña modificación en la función sumar() para que te lo realice, ya sea para 5 bancos o para 100.
El resultado de las sumas de los bancos, te lo muestro un un alert(), ya que no se muy bien donde lo quieres mostrar.
Para mi ejemplo, he utilizado solo los 4 primeros bancos... tendras que añadir el resto de bancos en el array "sumas", ok?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function sumar() {
	var sumas={
		"Afirme":0,
		"Bajio":0,
		"Banamex":0,
		"Banco Azteca":0
	}
 
	for(var i=1;i<5;i++)
	{
		banco=document.getElementById("banco"+i).value;
		valor=document.getElementById("valor"+i).value;
		console.log("banco"+i+" _ "+banco);
		sumas[banco]+=parseInt(valor);
	}
 
	var total=0
	for(var key in sumas)
	{
		alert("key: "+key+" = "+sumas[key]);
		total+=sumas[key];
	}
	document.getElementById("total").value=total;
}

Cualquier duda, no dudes en consultarme.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma condicional

Publicado por Sergio García petezajot@hotmail.com (4 intervenciones) el 19/12/2014 00:07:25
Muchas gracias, ya lo tengo y funciona a la perfección, de igual manera lo comparto por que alguien se ve en la necesidad como yo! Muchas gracias!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
var banks = {"~": 0, "Afirme": 0, "Bajio": 0, "Banamex": 0, "Banco Azteca": 0, "Banco Walmart": 0,
"Banorte": 0, "Banregio": 0, "BBVA Bancomer": 0, "Coppel": 0, "HSBC": 0, "Inbursa": 0, "IXE": 0, "Mifel": 0, "Santander": 0, "Scotiabank": 0};
var form = document.forms.formgral;
var selects = form["banco_fond[]"];
var deposit_fields = form["fond[]"];
var rest = form["auto[]"];
//muestra resultado
var result = function() {
var html_result = [];
for (var j in banks)
html_result.push(j == '~' ? '' : j + ': ' + banks[j]);
document.getElementById("result").innerHTML = "<div class='banks_style'>Totales:<br /> " + html_result.join("<br />")+"<div>";
}
//actualizar cantidad de cada banco, sumar los valores de cada campo
var update = function() {
for (var j in banks) {
var x = 0, field;
banks[j] = 0;
while (field = deposit_fields[x])
if (selects[x++].value == j)
banks[j] += +field.value;
}
result()
};
//armamos todo, recorremos todos los campos
for (var i = 0; i < deposit_fields.length; i++) {
//crea la lista de bancos para cada campo, asi mantenemos ordenado y evitamos el exceso de código HTML
var optionsHTML = '';
for (var j in banks)
optionsHTML += '<option value="' + j + '">' + j + '</option>';
selects[i].innerHTML = optionsHTML
////
//eventos para actualizar el total por cada cambio de banco o valor de depósito
selects[i].onblur = update
selects[i].onchange = update
selects[i].onfocus = update
selects[i].onmouseleave = update
selects[i].onmouseover = update
selects[i].onkeyup = update
selects[i].onkeypress = update
deposit_fields[i].onkeyup = update
deposit_fields[i].onchange = update
deposit_fields[i].onblur = update
}
var update2 = function() {
for (var j in banks) {
var x = 0, field;
banks[j] = 0;
while (field = rest[x])
if (selects[x++].value == j)
banks[j] += +field.value;
}
result()
};
update()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Suma condicional

Publicado por xve (1595 intervenciones) el 19/12/2014 08:33:03
Gracias por compartirlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar