Sumar campos de mi formulario
Espero me puedas ayudar con este tema: en mi web se puede crear un formulario con n campos de la siguiente forma un select con tres opciones 1 - 2 - 3 un campo text donde inserto valores la idea es crear una función que me permita sumar en una casilla todos lo valores del tipo text cuyo select sea 1 en tra casilla los valores del tipo text cuyo select sea 2 y así para el tres. ¿Alguna idea?
1 Respuesta
Respuesta de wzvang
0
0
![wzvang](http://blob.todoexpertos.com/letters/W_46_48.png?v=1)
wzvang, Javascript 100% Php 100% Html 100% CSS 100% SQL 80% Photoshop 100%
<script type="text/javascript"> function sumOptions(){ var a = document.forms["formulario"]; var obj = a.getElementsByTagName("input"); var total = 0; for(var i=0;i<obj.length;i++){ var sel = obj.parentNode.children[0]; if(obj.name != "result" && !isNaN(parseInt(obj.value)) && sel.getAttribute("rel") == sel.value){ total += parseInt(obj.value); } } a.result.value = total; } function startInputs(){ var a = document.forms["formulario"];var obj = a.getElementsByTagName("input"); var total = 0; for(var i=0;i<obj.length;i++){ var sel = obj.parentNode.children[0]; if(obj.name != "result"){ var sum = parseInt(obj.value); if(isNaN(sum) || sel.getAttribute("rel") != sel.value) sum = 0; sel.onchange=sumOptions; obj.onchange = sumOptions; obj.onblur = sumOptions; total += sum; } } a.result.value = total; } </script> <body onLoad="startInputs()"> <form name="formulario" method="post"> Input 1 (Suma en 2) <div name="lol"><select name="select1" rel="2"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select> <input type="text" name="text1" value="10" /></div> Input 2 (Suma en 3) <div><select name="select2" rel="3"><option value="1">1</option><option value="2">2</option><option value="3" selected>3</option></select> <input type="text" name="text2" value="40" /></div> Input 3 (Suma en 1) <div><select name="select3" rel="1"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select> <input type="text" name="text2" value="50" /></div> Resultado <input type="text" name="result" /> <button onClick="sumOptions(); return !1">Sumar</button> </form> </body> <body onLoad="startInputs()"> <form name="formulario" method="post"> Input 1 (Suma en 2) <div name="lol"><select name="select1" rel="2"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select> <input type="text" name="text1" value="10" /></div> Input 2 (Suma en 3) <div><select name="select2" rel="3"><option value="1">1</option><option value="2">2</option><option value="3" selected>3</option></select> <input type="text" name="text2" value="40" /></div> Input 3 (Suma en 1) <div><select name="select3" rel="1"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select> <input type="text" name="text2" value="50" /></div> Resultado <input type="text" name="result" /> <button onClick="sumOptions(); return !1">Sumar</button> </form> </body>
Si el atributo rel del select es igual a la opción seleccionada los datos se suman.
![fabianarlex](http://blob.todoexpertos.com/letters/F_141_48.png?v=1)
Hola gracias por responder... vamos en buen camino en cuanto al código que me dejaste el post lo probé pero no me sumo o no entendí bajo que condiciones lo hace a y le quite un body. Pero el formulario si tiene la sintaxis que yo explique en el ejemplo tu lo haces con tres filas pues en mi caso serian N solo note algo y es que solo colocaste un campo de resaltado y deberían ser tres uno para la suma de los input text cuyo select sea 1 otro para 2 y otro para el select 3. gracias
![wzvang](http://blob.todoexpertos.com/letters/W_46_48.png?v=1)
Ups... pues yo entendí esto: que me permita sumar en una casilla todos lo valores del tipo text.
¿Haber la sintaxis que quieres es así?
<sel>1|2|3</sel> <input value=3>
<sel>1|2|3</sel> <input value=1>
<sel>1|2|3</sel> <input value=0>
<sel>1|2|3</sel> <input value=3>
<sel>1|2|3</sel> <input value=4>
Suma de selección 1 = 5
Suma de selección 2 = 0
Suma de selección 3 = 6
¿Haber la sintaxis que quieres es así?
<sel>1|2|3</sel> <input value=3>
<sel>1|2|3</sel> <input value=1>
<sel>1|2|3</sel> <input value=0>
<sel>1|2|3</sel> <input value=3>
<sel>1|2|3</sel> <input value=4>
Suma de selección 1 = 5
Suma de selección 2 = 0
Suma de selección 3 = 6
![wzvang](http://blob.todoexpertos.com/letters/W_46_48.png?v=1)
<script type="text/javascript">
function sumOptions(){
var a = document.forms["formulario"]; var obj = a.getElementsByTagName("input");
var total = new Array(0,0,0); var results = 0;
for(var i=0;i<obj.length;i++){
var sel = obj.parentNode.children[0];
if(obj.getAttribute("rel") != "result"){
if(!isNaN(parseInt(obj.value))) total[sel.value-1] += parseInt(obj.value);
}else{
results++;
}
}
for(var z=1;z<=results;z++) eval("a.result"+z+".value="+total[z-1]+"");
}
function startInputs(){
var a = document.forms["formulario"];var obj = a.getElementsByTagName("input");
var total = new Array(0,0,0); var results = 0;
for(var i=0;i<obj.length;i++){
var sel = obj.parentNode.children[0];
if(obj.getAttribute("rel") != "result"){
var sum = parseInt(obj.value);
if(isNaN(sum)) sum = 0;
total[sel.value-1] += sum;
sel.onchange=sumOptions; obj.onchange = sumOptions; obj.onblur = sumOptions;
}else{
results++;
}
}
for(var z=1;z<=results;z++) eval("a.result"+z+".value="+total[z-1]+"");
}
</script>
<body onLoad="startInputs()">
<form name="formulario" method="post">
<div><select><option value="1">1</option><option value="2">2</option><option value="3" selected>3</option></select>
<input type="text" value="3" /></div>
<div><select><option value="1" selected>1</option><option value="2">2</option><option value="3">3</option></select>
<input type="text" value="1" /></div>
<div><select><option value="1" selected>1</option><option value="2">2</option><option value="3">3</option></select>
<input type="text" value="0" /></div>
<div><select><option value="1">1</option><option value="2">2</option><option value="3" selected>3</option></select>
<input type="text" value="3" /></div>
<div><select><option value="1" selected>1</option><option value="2">2</option><option value="3">3</option></select>
<input type="text" value="4" /></div>
<div>Suma de selección 1 <input type="text" name="result1" rel="result" /></div>
<div>Suma de selección 2 <input type="text" name="result2" rel="result" /></div>
<div>Suma de selección 3 <input type="text" name="result3" rel="result" /></div>
</form>
</body>
Esta es, cada vez que haces un cambio la suma se hace automáticamente, si quieres añadir más selecciones solo añade abajo de los resultados:
Suma de selección N <input type="text" name="resultN" rel="result" />
function sumOptions(){
var a = document.forms["formulario"]; var obj = a.getElementsByTagName("input");
var total = new Array(0,0,0); var results = 0;
for(var i=0;i<obj.length;i++){
var sel = obj.parentNode.children[0];
if(obj.getAttribute("rel") != "result"){
if(!isNaN(parseInt(obj.value))) total[sel.value-1] += parseInt(obj.value);
}else{
results++;
}
}
for(var z=1;z<=results;z++) eval("a.result"+z+".value="+total[z-1]+"");
}
function startInputs(){
var a = document.forms["formulario"];var obj = a.getElementsByTagName("input");
var total = new Array(0,0,0); var results = 0;
for(var i=0;i<obj.length;i++){
var sel = obj.parentNode.children[0];
if(obj.getAttribute("rel") != "result"){
var sum = parseInt(obj.value);
if(isNaN(sum)) sum = 0;
total[sel.value-1] += sum;
sel.onchange=sumOptions; obj.onchange = sumOptions; obj.onblur = sumOptions;
}else{
results++;
}
}
for(var z=1;z<=results;z++) eval("a.result"+z+".value="+total[z-1]+"");
}
</script>
<body onLoad="startInputs()">
<form name="formulario" method="post">
<div><select><option value="1">1</option><option value="2">2</option><option value="3" selected>3</option></select>
<input type="text" value="3" /></div>
<div><select><option value="1" selected>1</option><option value="2">2</option><option value="3">3</option></select>
<input type="text" value="1" /></div>
<div><select><option value="1" selected>1</option><option value="2">2</option><option value="3">3</option></select>
<input type="text" value="0" /></div>
<div><select><option value="1">1</option><option value="2">2</option><option value="3" selected>3</option></select>
<input type="text" value="3" /></div>
<div><select><option value="1" selected>1</option><option value="2">2</option><option value="3">3</option></select>
<input type="text" value="4" /></div>
<div>Suma de selección 1 <input type="text" name="result1" rel="result" /></div>
<div>Suma de selección 2 <input type="text" name="result2" rel="result" /></div>
<div>Suma de selección 3 <input type="text" name="result3" rel="result" /></div>
</form>
</body>
Esta es, cada vez que haces un cambio la suma se hace automáticamente, si quieres añadir más selecciones solo añade abajo de los resultados:
Suma de selección N <input type="text" name="resultN" rel="result" />
- Compartir respuesta
- Anónimo
ahora mismo
![](/content/images/user_nophoto_small.png)