Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/11/2011, 18:21
lubtufano
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 9 meses
Puntos: 72
Respuesta: Realizar Calculos en tabla con filas repetidas por bucle FOR de PHP

El problema es que los nombres de los campos de texto se repiten dependiendo de la cantidad de productos, por ejemplo, si se tienen 5 productos entonces se tendra 5 INPUT con name="numero1", 5 con name="numero2", 5 con name="numero3", etc. entonces cuando se llama a la función fncSumar() javascript no sabe cuales campos debe utilizar ya que hay varios que tienen el mismo atributo name. Es mejor utilizar los metodos DOM para asi indicar que se tomen en cuenta solo los campos de la misma fila. Prueba esta función que sirve bien.

Código Javascript:
Ver original
  1. <script>
  2. function fncSumar(elem){
  3. var caja= document.forms["sumar"].elements;
  4. var fila= elem.parentNode.parentNode;
  5. var numeros= fila.getElementsByTagName('input');
  6. var resultado= 0;
  7. for(i=0; i<numeros.length-1; i++)
  8. {
  9.   resultado+= Number(numeros[i].value);
  10. }
  11.  
  12. if(!isNaN(resultado)){
  13. numeros[numeros.length-1].value= resultado;
  14. }
  15. }
  16. </script>

Para llamarla se debe pasar la palabra clave this como parametro.

Código javascript:
Ver original
  1. <?php
  2.     for ($i = 0; $i < count($listaPdtos); $i++) {
  3. ?>
  4.         <tr<?php echo ($i % 2 == 0) ? " class=\"impar\"" : "" ?>>
  5.             <td class="text"><?php echo $listaPdtos[$i] ?></td>
  6.             <td class="number"><input type="text" name="numero1"
  7.  
  8. size="2" onKeyUp="fncSumar(this)" /></td>
  9.             <td class="number"><input type="text" name="numero2"
  10.  
  11. size="2" onKeyUp="fncSumar(this)" /></td>
  12.         <td class="number"><input type="text" name="numero3" size="2"
  13.  
  14. onKeyUp="fncSumar(this)" /></td>
  15.         <td class="number"><input type="text" name="numero4" size="2"
  16.  
  17. onKeyUp="fncSumar(this)" /></td>
  18.             <td class="number"><input type="text" name="numero5"
  19.  
  20. size="2" onKeyUp="fncSumar(this)" /></td>
  21.         <td class="number"><input type="text" name="numero6" size="2"
  22.  
  23. onKeyUp="fncSumar(this)" /></td>
  24.         <td class="number"><input type="text" name="numero7" size="2"
  25.  
  26. onKeyUp="fncSumar(this)" /></td>
  27.             <td class="number"><input type="text" name="numero8"
  28.  
  29. size="2" onKeyUp="fncSumar(this)" /></td>
  30.         <td class="number"><input type="text" name="numero9" size="2"
  31.  
  32. onKeyUp="fncSumar(this)" /></td>
  33.         <td class="number"><input type="text" name="numero10" size="2"
  34.  
  35. onKeyUp="fncSumar(this)" /></td>
  36.             <td class="number"><input type="text" name="numero11"
  37.  
  38. size="2" onKeyUp="fncSumar(this)" /></td>
  39.         <td class="number"><input type="text" name="numero12" size="2"
  40.  
  41. onKeyUp="fncSumar(this)" /></td>
  42.         <td class="number"><input type="text" name="resultado" size="4"
  43.  
  44. /></td>
  45.         </tr>
  46. <?php
  47.     }
  48. ?>