Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Sumar multiples variables

Estas en el tema de Sumar multiples variables en el foro de Javascript en Foros del Web. Hola, buenas tardes, tengo un problema con el que espero puedan ayudarme, estoy generando una aplicacion web, en la cual tengo que sumar multiples variables, ...
  #1 (permalink)  
Antiguo 27/07/2015, 16:18
 
Fecha de Ingreso: enero-2012
Mensajes: 55
Antigüedad: 12 años, 10 meses
Puntos: 1
Sumar multiples variables

Hola, buenas tardes, tengo un problema con el que espero puedan ayudarme, estoy generando una aplicacion web, en la cual tengo que sumar multiples variables, el problema es que tecnicamente no se sabe cuantas variables van a ser, puede ser desde una, hasta 10 o mas, ya que se van a sumar precios de refacciones, entonces el usuario añade una refaccion y muestra el precio de esa refaccion, puede agregar tantas refacciones quiera el usuario, y al final todos esos precios se tiene que sumar.

Lo que estoy haciendo es que en input pongo todos los precios con un id, y tengo un input en blanco para que ahi muestre el resultado, los precios de las refacciones los recojo mediante una funcion javascript con getElementById , intentaba hacer mediante un for en javascript recoger todos los id en caso de que existan, pero no se bien como hacerlo, primero pongo la forma en la que se imprimen las refacciones con el precio, eso es en php

Código PHP:
Ver original
  1. <?php
  2. $conref="SELECT * FROM ".$prefijo_tabla."_refacciones INNER JOIN ".$prefijo_tabla."_inventario ON ".$prefijo_tabla."_refacciones.idideninventario=".$prefijo_tabla."_inventario.idinventario WHERE ididentiorden='".$arrorden['idrefaccion']."'";
  3.                                                                       $queryref=$con->query($conref);
  4.                                                                       if($queryref->rowcount() > 0 ){
  5.                                                                        
  6.                                                                                 for($x=1; $x<=$queryref->rowcount(); $x++){
  7.                                                                                         $arrayref=$queryref->fetch(PDO::FETCH_ASSOC);
  8.                                                                                         echo"<tr><td>".$arrayref['nombreinventario']."</td><td><input type='text' readonly='readonly' id='$x' value='".$arrayref['precio']."' class='form-control'></td><td><a href='?v=bor&refaccion=".$arrayref['idrefa']."&prefijo=$prefijo_tabla'>Eliminar</a></td></tr>";
  9.                                                                                 } ?>
  10.                                                                                 <input type="hidden" id="controlador" value="<?php echo $queryref->rowcount(); ?>">
  11.                                                                        
  12.                                                                     <?php   } ?>
  13.  
  14. <tr>
  15.                                 <td>Total</td>
  16.                                 <td><input type="text" class="form-control" readonly="readonly" id="total"></td>
  17.                         </tr>

En el campo oculto que dice "controlador" pongo el numero de refacciones que coloca el usuario, ahora coloco el codigo javascript como pensaba hacerlo:

Código Javascript:
Ver original
  1. function sumarcampos() {
  2.         for (x=0;x<=cont;x++) {
  3.                 var resX=document.getElementById(X).value;
  4.                
  5.         }
  6.                 resf=parseInt(resX) + parseInt(resX);
  7.         document.getElementById("total").value=resf;
  8. }

Dentro del FOR pueden darse cuenta que pongo "resX" y dentro del parentesis una X, esto debido a que pues requiero para la suma que cada valor este en una variable y dentro de el parentesis del getElementById, todos los id son numeros, asi lo quise hacer pero se que no tiene mucha logica que digamos, no se como colar esa variable X del for para que lo tome como "res1", "res2", "res3" etc... y despues hacer que sume todos esos resultados para que ponga en el campo "total" el resultado. Como no se me ocurrio otra forma de hacerlo, quise haerlo asi:

Código Javascript:
Ver original
  1. function sumarcampos() {
  2.         var cont=document.getElementById("controlador");
  3.         var precio1=document.getElementById("1").value;
  4.         var precio3=document.getElementById("2").value;
  5.                 var precio4=document.getElementById("3").value;
  6.                 var precio5=document.getElementById("4").value;
  7.                 var precio6=document.getElementById("5").value;
  8.                 var precio7=document.getElementById("6").value;
  9.         var resf;
  10.         resf= parseInt(precio1)+ parseInt(precio2) + parseInt(precio3) + parseInt(precio4) + parseInt(precio5) + parseInt(precio6) + parseInt(precio7);
  11.         document.getElementById("total").value=resf;
  12. }

Puse tantos "precio" por si el usuario colocaba mas para que los reconociera, yo pense que si no existian, el valor en automatico seria 0 y no los tomaria en cuenta para la suma, pero al intentar hacerlo provoca que no haya resultado, en el entorno de prueba que tengo, solo hay dos refacciones, no he ingresado mas y el codigo del javascript es el siguiente

Código Javascript:
Ver original
  1. function sumarcampos() {
  2.         var cont=document.getElementById("controlador");
  3.         var precio1=document.getElementById("1").value;
  4.         var precio2=document.getElementById("2").value;
  5.         var resf;
  6.         resf= parseInt(precio1)+ parseInt(precio2) ;
  7.         document.getElementById("total").value=resf;
  8. }

El cual si hace la suma de las dos unicas refacciones, pero si coloco una refaccion mas, obviamente solo hace la suma de los dos primeros campos, entonces quisiera si pueden ayudarme con alguna forma de sumar multiples variables con for o while ya que no se sabe cuantas variables van a sumarse exactamente.

Última edición por zerobathory; 27/07/2015 a las 16:27
  #2 (permalink)  
Antiguo 27/07/2015, 19:40
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Sumar multiples variables

Una manera práctica de hacer lo que buscas es utilizar una expresión regular como selector y el método .querySelectorAll() para tomar a todos los elementos cuyo id empiece por "res". El resultado será una lista de nodos que podrás recorrer con cualquier estructura repetitiva.

Código Javascript:
Ver original
  1. var nodos = document.querySelectorAll("[id^=res]");

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 28/07/2015, 17:09
 
Fecha de Ingreso: enero-2012
Mensajes: 55
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Sumar multiples variables

Cita:
Iniciado por Alexis88 Ver Mensaje
Una manera práctica de hacer lo que buscas es utilizar una expresión regular como selector y el método .querySelectorAll() para tomar a todos los elementos cuyo id empiece por "res". El resultado será una lista de nodos que podrás recorrer con cualquier estructura repetitiva.

Código Javascript:
Ver original
  1. var nodos = document.querySelectorAll("[id^=res]");

Saludos
Gracias por la respuesta, pero ya encontre como hacerlo, coloco la solucion en el siguiente comentario.
  #4 (permalink)  
Antiguo 28/07/2015, 17:13
 
Fecha de Ingreso: enero-2012
Mensajes: 55
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Sumar multiples variables

Estube buscando una solucion en la red y encontre ya una solucion, primeramente en todos los campos de refacciones, tienen que tener un id de 1, 2, 3 y asi sucesivamente, el cual yo hago con php de la siguiente forma:

Código PHP:
Ver original
  1. <?php $conref="SELECT * FROM refacciones INNER JOIN inventario ON refacciones.idideninventario=inventario.idinventario WHERE ididentiorden='".$arrorden['idrefaccion']."'";
  2.                                                                       $queryref=$con->query($conref);
  3.                                                                       if($queryref->rowcount() > 0 ){
  4.                                                                        
  5.                                                                                 for($x=1; $x<=$queryref->rowcount(); $x++){
  6.                                                                                         $arrayref=$queryref->fetch(PDO::FETCH_ASSOC);
  7.                                                                                         echo"<tr><td>".$arrayref['nombreinventario']."</td><td><input type='text' readonly='readonly' id='$x' value='".$arrayref['precio']."' class='form-control'></td><td><a href='?v=bor&refaccion=".$arrayref['idrefa']."&prefijo=$prefijo_tabla'>Eliminar</a></td></tr>";
  8.                                                                                 }
  9.                                                                      }
  10.                                                                       else{
  11.                                                                         echo "<tr><td colspan='3'>No hay costo de servicio a&uacute;n</td></tr>";
  12.                                                                       }
  13.                                                                 ?>

Y el codigo javascript para que sume, lo pongo entre las etiquetas <head></head>

Código Javascript:
Ver original
  1. function sumarcampos() {
  2.     id = 1;
  3.     suma =0;
  4.     existe = true;
  5.     while(existe){    
  6.         try{
  7.         campo = document.getElementById(id);
  8.             if(document.getElementById(id).value!=''){
  9.                 suma = suma + parseInt(document.getElementById(id).value);
  10.             }
  11.             id = id+1;
  12.         }catch(e){
  13.            existe = false;
  14.         }  
  15.     }
  16.     document.getElementById('total').value=suma;  
  17. }

Y como no ocupo ningun boton en si ni nada, la funcion la llamo dentro de la etiqueta body

<body onLoad="sumarcampos()">

Y listo :D
  #5 (permalink)  
Antiguo 28/07/2015, 17:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Sumar multiples variables

Para no tener que asignar identificadores independientes, puedes asignar una clase para todos los elementos y solo tendrías que tomarlos mediante dicha clase y recorrer el conjunto resultante.

Un ejemplo utilizando los métodos iterativos del objeto Array:

Código Javascript:
Ver original
  1. var total = [].map.call(document.querySelectorAll(".clase"), function(elem){
  2.     return parseInt(elem.value);
  3. }).reduce(function(prev, next){
  4.     return prev + next;
  5. });

La variable total contendrá el valor de la sumatoria. Solo es otra alternativa.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: funcion, input, multiples, php, select, valor, variable, variables
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 14:45.