Ver Mensaje Individual
  #7 (permalink)  
Antiguo 29/12/2016, 11:48
Avatar de Alexis88
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