Foros del Web » Programando para Internet » Javascript »

mostrar valores de suma de 2 array

Estas en el tema de mostrar valores de suma de 2 array en el foro de Javascript en Foros del Web. Hola equipo soy nueva en esto de los foros. De favor necesito una ayudadita, estoy luchando con un código en javascript, estoy tratando de realizar ...
  #1 (permalink)  
Antiguo 26/12/2016, 15:35
 
Fecha de Ingreso: noviembre-2015
Ubicación: Mexico
Mensajes: 3
Antigüedad: 8 años, 5 meses
Puntos: 0
mostrar valores de suma de 2 array

Hola equipo soy nueva en esto de los foros.
De favor necesito una ayudadita, estoy luchando con un código en javascript, estoy tratando de realizar una suma de 2 columnas y tengo una tercera donde en automático me dé la sumatoria de estas dos. El problema es que no logro separar valores del array, el código ya me hace la suma, pero al momento de mostrar resultados no los separa en diferentes filas, si no que se quedan en una sola.
Mis tres columnas del formulario "captura":
<input type="text" id="dato1" name="dato1[]" value="0" size="12">
<input type="text" id="dato2" name="dato2[]" value="0" size="12" onblur='ope()'>
<div id="test" name="test[]"> </div>

Función ope:
<script language="javascript" type="text/javascript">
function ope()
{
var a= document.getElementsByName('dato1[]');
var b= document.getElementsByName('dato2[]');

var sum = [];

for (i=0; i<a.length; i++)
{
sum[i]=(parseFloat(a[i].value))+(parseFloat(b[i].value));
}//for

document.getElementById('test').innerHTML=sum;
}//function
</script>

El resultado es el siguiente:



Muchisimas Gracias por el apoyo
  #2 (permalink)  
Antiguo 28/12/2016, 09:53
 
Fecha de Ingreso: noviembre-2015
Ubicación: Mexico
Mensajes: 3
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: mostrar valores de suma de 2 array

Hola equipo, de favor su super apoyo, me siento desesperada sigo intentando y no lo consigo :(
quien me pueda ayudar se lo agradecere bastante.
  #3 (permalink)  
Antiguo 28/12/2016, 10:08
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: mostrar valores de suma de 2 array

Antes de intentar ayudarte, necesito preguntarte algo; ¿estás usando estos elementos en todas las filas de la tabla?
Código HTML:
Ver original
  1. <input type="text" id="dato1" name="dato1[]" value="0" size="12">
  2. <input type="text" id="dato2" name="dato2[]" value="0" size="12" onblur='ope()'>
  3. <div id="test" name="test[]"> </div>
__________________
«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
  #4 (permalink)  
Antiguo 28/12/2016, 14:40
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: mostrar valores de suma de 2 array

Como decimos por aquí "Más vale una imagen que cien palabras". Así que me guiaré por la imagen
Código Javascript:
Ver original
  1. <!DOCTYPE html>
  2. <html dir="ltr" lang="es-es">
  3.     <head>
  4.         <title></title>
  5.         <meta charset="utf-8">
  6.         <meta name="viewport" content="user-scalable=yes, width=device-width, initial-scale=1">
  7.         <style>
  8.            
  9.         </style>
  10.         <script>
  11.             document.addEventListener('DOMContentLoaded', function() {
  12.                 new foo();
  13.             }, false);
  14.  
  15.  
  16.             function foo() {
  17.                 this.dato1 = document.querySelectorAll('input[name="dato1[]"]');
  18.                 this.dato2 = document.querySelectorAll('input[name="dato2[]"]');
  19.                 this.suma = document.querySelectorAll('div[name="test[]"]');
  20.  
  21.                 var _this = this;
  22.                 [].forEach.call(_this.dato1, function(campo, indice) {
  23.  
  24.                     campo.addEventListener('keyup', function() {
  25.  
  26.                         _this.calcular(indice);
  27.  
  28.                     }, false);
  29.  
  30.                     _this.dato2[indice].addEventListener('keyup', function() {
  31.  
  32.                         _this.calcular(indice);
  33.  
  34.                     }, false);
  35.                 })
  36.             }
  37.  
  38.             foo.prototype.calcular = function(i) {
  39.                 var dato1 = parseFloat(this.dato1[i].value) || 0,
  40.                 dato2 = parseFloat(this.dato2[i].value) || 0;
  41.  
  42.                 this.suma[i].textContent = dato1 + dato2;
  43.             }
  44.         </script>
  45.     </head>
  46.     <body>
  47.  
  48.         <table>
  49.             <tr>
  50.                 <td><input type="text" name="dato1[]" value="0" size="12"></td>
  51.                 <td><input type="text" name="dato2[]" value="0" size="12"></td>
  52.                 <td><div name="test[]"> </div></td>
  53.             </tr>
  54.             <tr>
  55.                 <td><input type="text" name="dato1[]" value="0" size="12"></td>
  56.                 <td><input type="text" name="dato2[]" value="0" size="12"></td>
  57.                 <td><div name="test[]"> </div></td>
  58.             </tr>
  59.         </table>
  60.        
  61.     </body>
  62. </html>
  #5 (permalink)  
Antiguo 28/12/2016, 14:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: mostrar valores de suma de 2 array

Particularmente, usaría el evento input que es el más adecuado para casos en los que se opera con valores en campos de texto. Delegar el evento al elemento contenedor, lo haría más eficiente que registrarlo elemento por elemento; pero, en síntesis, debería funcionar. Es similar a la idea que tenía en mente.

Anyway, sería muy útil que sam9021 nos aclare la duda sobre la estructura que utiliza porque veo que otro usuario intentó contestar antes y se topó con el mismo problema.
__________________
«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
  #6 (permalink)  
Antiguo 28/12/2016, 16:53
 
Fecha de Ingreso: noviembre-2015
Ubicación: Mexico
Mensajes: 3
Antigüedad: 8 años, 5 meses
Puntos: 0
Información Respuesta: mostrar valores de suma de 2 array

Hola Alexis88 y mpozo trate con tu codigo pero no obtuve resultados

les explico a detalle, tengo un formulario en el cual previamente yo recibo una variable $n, lo que hago es hacer bucle while a los elementos del formulario :

Código HTML:
Ver original
  1. <form name="captura" method="post" action="" >
  2.   <input type="hidden" name="n" value=<?php  echo $n;?>/>
  3.   <table>  
  4. <tr>
  5.     <td>No</td>
  6.     <td>FICHA</td>
  7.         <td>SERIE</td>
  8.         <td>DATO1</td>
  9.     <td>DATO2</td>
  10.         <td>SUMA</td>    
  11.      
  12. </tr>
  13. <tr>
  14. <?php
  15. ///////////Hago la consulta a mi BD para traer previamente FICHA Y SERIE
  16. $enlistar = $obj->consultar_f($ficha);
  17. $row = mysql_fetch_array($enlistar);
  18. $ficha_master=$row['ficha'];
  19. $serie=$row['serie'];
  20.  
  21. $cantidad=1;
  22. while($cantidad <= $n) {
  23. ?>
  24.     <td><?php echo $cantidad; ?></td>  
  25.     <td><?php echo $ficha_master . $cantidad;?></td>
  26.         <td><?php echo $serie; ?></td>
  27.     <td><input type="text" id="dato1" name="dato1[]" value="0" size="12"></td>
  28.         <td><input type="text" id="dato2" name="dato2[]" value="0" size="12"  onblur='ope()'></td> 
  29.     <td><div  id="test" name="test[]" > </div></td>
  30.    
  31. <?php
  32. $cantidad++;
  33.   }
  34. ?>
  35. </form>


y la funcion ope:

Código Javascript:
Ver original
  1. <script language="javascript" type="text/javascript">
  2. function ope()
  3. {  
  4. var a= document.getElementsByName('dato1[]');
  5. var b= document.getElementsByName('dato2[]');
  6. var sum = [];
  7. for (i=0; i<a.length; i++)
  8. {
  9. sum[i]=(parseFloat(a[i].value))+(parseFloat(b[i].value));
  10. }//for
  11. document.getElementById('test').innerHTML=sum;
  12. }//function
  13. </script>

lo que no logro hacer es separar los elementos del array en los diversos div que se estan ciclando como la imagen que envie mas arriba.
De favor su apoyo muchisimas gracias
  #7 (permalink)  
Antiguo 29/12/2016, 11:48
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: mostrar valores de suma de 2 array

Para empezar, deberías evitar repetir elementos con el mismo id. El ejemplo de mpozo te puede servir de guía ya que utiliza nombres a manera de arreglos de elementos. También puedes utilizar clases, pues, pueden repetirse. Fíjate, además, que estás intentando mostrar el contenido de un arreglo como texto de un elemento del DOM; eso no va a funcionar como esperas porque primero necesitas extraer la información y asignarla a cada elemento, lo cual también sería ineficiente puesto que repetirías el proceso para todas las filas cuando debería suceder solo en la fila en la que está ocurriendo el proceso.

Una forma en la cual haría esto sería, primero; agrupando a cada tresillo de elementos (el del primer valor, el del segundo y el que mostrará el resultado) en filas, teniendo cada elemento una clase distinta a la de los otros dos pero igual a la de sus equivalentes en las demás filas. Enseguida, asociaría el evento input (se produce al ocurrir un cambio en el valor de un elemento <input> o <textarea>) al listado, de tal forma que, cuando se produzca, busquemos, mediante el objeto del evento, a los tres elementos que necesitamos para realizar la operación. En el ejemplo adjunto, utilizo el método .parentNode para obtener a la fila entera. Finalmente, ya obtenidos los elementos, procedo a tomar el valor numérico que contengan (o cero, si no existe), para lo cual utilizo el operador + (puedes utilizar otros operadores o métodos), y, por último, los sumo y asigno el resultado como valor del tercer elemento.

Código HTML:
Ver original
  1. <section id="list">
  2.     <div class="row">
  3.         <div class="col">
  4.             <label>Dato 1:</label>
  5.             <input type="text" class="d1" />
  6.         </div><div class="col">
  7.             <label>Dato 2:</label>
  8.             <input type="text" class="d2" />
  9.         </div><div class="col">
  10.             <label>Resultado:</label>
  11.             <input type="text" class="d3" readOnly />
  12.         </div>
  13.     </div>
Código Javascript:
Ver original
  1. "use strict";
  2.  
  3. var Sumas = {
  4.     load: function(){
  5.         !Sumas.list && (Sumas.list = this.querySelector("#list")); //Tomamos al listado si no se lo ha hecho antes
  6.         Sumas.list.addEventListener("input", Sumas.add, false); //Registramos el evento "input" en el listado
  7.     },
  8.     add: function(e){
  9.         var fila = e.target.parentNode.parentNode, //La fila en la cual está ocurriendo el proceso
  10.             d1 = fila.querySelector(".d1"), //El primer elemento
  11.             d2 = fila.querySelector(".d2"), //El segundo elemento
  12.             d3 = fila.querySelector(".d3"); //El elemento en donde se mostrará la respuesta
  13.         d3.value = +(d1.value || 0) + +(d2.value || 0); //Sumamos los valores y mostramos la suma
  14.     }
  15. };
  16.  
  17. //Se ejecutará el método "Sumas.load" al terminar de cargar el árbol de elementos del documento
  18. document.addEventListener("DOMContentLoaded", Sumas.load, false);

DEMO

El número de filas puede variar; incluso funcionará si añades o quitas filas en tiempo de ejecución.

__________________
«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

Última edición por Alexis88; 29/12/2016 a las 12:02 Razón: Comentarios
  #8 (permalink)  
Antiguo 29/12/2016, 14:44
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: mostrar valores de suma de 2 array

Mi primera opción, al igual que tú, fue la de asignar el evento al ancestro superior y usar event.target pero, al haber dos campos más, esto implicaba que al realizar cualquier acción con el teclado sobre estos dos campos se invocaría la función que realiza la suma. Así que, preferí asignar a los campos involucrados el evento para evitarlo.
No sé, quizás no supe sopesar los pros y contras de ambas maneras de realizarlo

Etiquetas: html, input, suma, text, 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 11:43.