Foros del Web » Programando para Internet » Javascript »

Sumar Arrays

Estas en el tema de Sumar Arrays en el foro de Javascript en Foros del Web. Hola a todos. Tengo el siguiente script que me funciona de maravilla: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
  #1 (permalink)  
Antiguo 06/10/2011, 07:00
Avatar de _Andrea_  
Fecha de Ingreso: octubre-2011
Ubicación: Medellin
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Sumar Arrays

Hola a todos.

Tengo el siguiente script que me funciona de maravilla:

Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Documento sin t&iacute;tulo</title>
  6. <script type="text/javascript">
  7. function Sumar(){      
  8. interval = setInterval("calcular()",1);
  9. }
  10. function calcular(){
  11. uno = document.autoSumForm.PrimeraCaja.value;    
  12. dos = document.autoSumForm.SegundaCaja.value;      
  13. document.autoSumForm.TerceraCaja.value = (uno * 1) + (dos * 1);
  14. }
  15. function NoSumar(){      
  16. clearInterval(interval);
  17. }
  18. </script>
  19. </head>
  20.  
  21. <body>
  22. <form name="autoSumForm"><input type=text name="PrimeraCaja" value="" onFocus="Sumar();" onBlur="NoSumar();">
  23. + <input type=text name="SegundaCaja" value="" onFocus="Sumar();" onBlur="NoSumar();">
  24. = <input type=text name="TerceraCaja"></form>

Pero lo quiero implementar en una busqueda, la cual me arroja unos resultados (pueden ser 4 o N resultados), donde de una Base de Datos me traigo unos registros; me explico:
En el area de texto PrimeraCaja pueden mostrarse los N registros segun lo que me arroje la busqueda, como hago para sumar lo que escriba o digite en la SegundaCaja con la Primera ya que son datos dinamicos.

EJEMPLO (la PrimeraCaja, son datos extraidos de la Base de Datos)

PrimeraCaja | SegundaCaja | TerceraCaja

1 |poder digitar algun numero | resultado segun la suma de las Cajas
56 |poder digitar algun numero | resultado segun la suma de las Cajas
7 |poder digitar algun numero | resultado segun la suma de las Cajas
10 |poder digitar algun numero | resultado segun la suma de las Cajas

Espero no molestar con mi pregunta y haber sido clara con esta. Me disculpo si el titulo no coincide con lo que escribi, creo que son datos dinamicos.

Última edición por _Andrea_; 06/10/2011 a las 07:42 Razón: quedo mall
  #2 (permalink)  
Antiguo 07/10/2011, 10:53
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: Sumar Arrays

Código javascript:
Ver original
  1. Cálculos:
  2. <div style='display:none' id='resultadosdeDB'>1,56,7,10</div>
  3.  
  4. <form name="autoSumForm"></form>
  5.  
  6. <script>
  7. RESULTADOS_DE_DB = document.getElementById('resultadosdeDB').textContent;
  8. RESULTADOS_DE_DB = RESULTADOS_DE_DB.split(',') // convierte en array
  9.  
  10. function Sumas(nombre_form){
  11.    
  12.     var d = document, f = d.forms[nombre_form], i, Create = function(tag){return d.createElement(tag)}, Text = function(s){return d.createTextNode(s)},
  13.     keyFn = function(Prim,Seg,Ter){  // Proceso de suma
  14.         Sum = function(){
  15.             Ter.value = (parseInt(Prim.value,10) || 0) + (parseInt(Seg.value,10) || 0)
  16.         }
  17.         Seg.onkeyup = Sum;  Ter.onfocus = Sum;  Ter.onblur = Sum
  18.     }
  19.     for(i=0,l=RESULTADOS_DE_DB.length;i<l;i++){
  20.         var Prim = Create('input'), Seg = Create('input'), Ter = Create('input'),
  21.         Mas = Create('span'), Igual = Create('span')
  22.         Mas.appendChild(Text(' + ')); Igual.appendChild(Text(' = '))
  23.         Prim.value = RESULTADOS_DE_DB[i]
  24.         f.appendChild(Prim) // Primera Caja
  25.             f.appendChild(Mas) // +
  26.         f.appendChild(Seg) // Segunda Caja
  27.             f.appendChild(Igual) // =
  28.         f.appendChild(Ter) // Tercera Caja
  29.         f.appendChild(d.createElement('br')) // <br/>
  30.        
  31.         keyFn(Prim,Seg,Ter) // Sumar al teclear, salir de la caja, seleccionar caja...
  32.     }
  33. }
  34.  
  35. Sumas('autoSumForm')
  36. </script>

Por cierto el interval que usas hace que se ejecute la función de suma cada milisegundo, imagina cuando a de trabajar el script.
Los métodos que te e puesto suman los valores cuando se teclea en las cajas de texto.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */

Última edición por America|UNK; 07/10/2011 a las 10:58
  #3 (permalink)  
Antiguo 07/10/2011, 16:15
Avatar de _Andrea_  
Fecha de Ingreso: octubre-2011
Ubicación: Medellin
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sumar Arrays

Muchas, pero muchas gracias.
Aunque tengo una inquietud, en esta parte del código:
Código Javascript:
Ver original
  1. [B]<div style='display:none' id='resultadosdeDB'>1,56,7,10</div>
  2. *
  3. <form name="autoSumForm"></form>[/B]
,
si agrego o quito un numero más, eso pasa con los campos, pero que posibilidad hay si en vez de estar esos número, los pudiera cambiar por un campo de texto,

Ejemplo

Código PHP:
Ver original
  1. <input name="cantidad1[]" type="text" id="cantidad1" value="<?php echo $row_MostrarPedido['cantidad']; ?>" size="3" READONLY/>

donde el value es el resultado que se genera tras realizar las busquedas, hay me muestra si son 1 o más campos, pero son dinamicos, el corchete([]) del nombre del campo, lo utilizo porque realizo un foreach para insertar y actualizar unas tablas. Si se puede hacer esto.

Muchas gracias por tu ayuda, gracias..... gracias.

Última edición por _Andrea_; 07/10/2011 a las 16:22 Razón: faltaba algo
  #4 (permalink)  
Antiguo 07/10/2011, 18:39
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: Sumar Arrays

Una duda:

$row_MostrarPedido['cantidad'] te muestra el número de campos que quieres sumar?,
Ejemplo:
$row_MostrarPedido['cantidad'] = 2

2 campos?
1 |poder digitar algun numero | resultado segun la suma de las Cajas
56 |poder digitar algun numero | resultado segun la suma de las Cajas

el 1 y 56 de dónde los sacas?, explicate bien.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #5 (permalink)  
Antiguo 09/10/2011, 13:17
Avatar de _Andrea_  
Fecha de Ingreso: octubre-2011
Ubicación: Medellin
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sumar Arrays

Gracias por tu interés, que pena es que estuve hospitalizada por eso no conteste, pero bueno.

Por ejemplo, cuando consulto a la Base de Datos, creo una tabla en la cual creo campos de texto, esto con el fin que me muestre los resultados arrojados de la consulta, a los campos de texto les doy nombres, cantidad[], es el campo que me recoge los número de la Base de datos, caja[] es el segundo campo de texto, donde quiero digitar cualquier número, resultado[], es la tercera caja de texto donde me debe aparecer la suma de los dos campos de texto anteriores (cantidad+caja).
Entonces los números 1 y 56 provienen de la Base de Datos, los cuales los muestro o imprimo en la caja de texto que se llama cantidad[], asi como esos números vienen de alla, pueden aparecer más, son datos que registro en una Base de Datos.

Disculpame si no conteste antes, pero es que estaba muy mal.

Gracias por tu interes de ayudarme.
  #6 (permalink)  
Antiguo 09/10/2011, 21:17
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: Sumar Arrays

Asi es la estructura de tu tabla de sumas?
Código javascript:
Ver original
  1. <form name="autoSumForm">
  2. <table>
  3. <tr><td><input type='text' name='cantidad[]' value='1'  />+</td><td><input type='text' name='caja[]'/>=</td><td><input type='text' name='resultado[]' /></td></tr>
  4. <tr><td><input type='text' name='cantidad[]' value='56' />+</td><td><input type='text' name='caja[]'/>=</td><td><input type='text' name='resultado[]' /></td></tr>
  5. <tr><td><input type='text' name='cantidad[]' value='7'  />+</td><td><input type='text' name='caja[]'/>=</td><td><input type='text' name='resultado[]' /></td></tr>
  6. <tr><td><input type='text' name='cantidad[]' value='10' />+</td><td><input type='text' name='caja[]'/>=</td><td><input type='text' name='resultado[]' /></td></tr>
  7. </table>
  8. </form>
  9.  
  10. <script>
  11. function Sumas(nombre_form){
  12.     var f = document.forms[nombre_form],T = f.getElementsByTagName('tr'),i=0,l=T.length,Sum,all,
  13.     S = function(Prim,Seg,Ter){
  14.         // Proceso de suma
  15.         Sum = function(){Ter.value = (parseInt(Prim.value,10) || 0) + (parseInt(Seg.value,10) || 0)}
  16.         Seg.onkeyup = Sum
  17.         Ter.onfocus = Sum
  18.         Ter.onblur = Sum
  19.         return !0
  20.     }, byName = function(T,name){
  21.         // Buscar atributo name
  22.         all = T.getElementsByTagName('*'),j=0
  23.         while(all[j].getAttribute('name') != name && j<all.length) j++
  24.         return all[j]
  25.     }
  26.         // Sumar al teclear, salir de la caja, seleccionar caja...
  27.     while(i<l && S(byName(T[i],'cantidad[]'), byName(T[i],'caja[]'), byName(T[i],'resultado[]'))) i++
  28. }
  29.  
  30. Sumas('autoSumForm')
  31. </script>

Si tienes alguna duda, avisame.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #7 (permalink)  
Antiguo 10/10/2011, 00:00
Avatar de _Andrea_  
Fecha de Ingreso: octubre-2011
Ubicación: Medellin
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sumar Arrays

Muchas gracias tu ayuda me ha servido demasiado, te pido disculpas por molestarte tanto, gracias, pero tengo una duda;
Cuando hago lo siguiente: agrego un tr o una tabla más para darles nombres a los campos no me realiza nada de la operación, anexo el código con lo que realice nuevo:

Agregando tr

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Documento sin t&iacute;tulo</title>
  5.  
  6. </head>
  7.  
  8.  
  9. <form name="autoSumForm">
  10. <table align="center">
  11. <tr>
  12.                 <th class="Estilo1" scope="col">Primera</th>
  13.                 <th class="Estilo1" scope="col"><div align="center">Segunda</div></th>
  14.                 <th class="Estilo1" scope="col"><div align="center">Tercera</div></th>
  15.                 </tr>
  16.  
  17. <tr><td><input type='text' name='cantidad[]' value='1'* />+</td><td><input type='text' name='caja[]'/>=</td><td><input type='text' name='resultado[]' /></td></tr>
  18. <tr><td><input type='text' name='cantidad[]' value='56' />+</td><td><input type='text' name='caja[]'/>=</td><td><input type='text' name='resultado[]' /></td></tr>
  19. <tr><td><input type='text' name='cantidad[]' value='7'* />+</td><td><input type='text' name='caja[]'/>=</td><td><input type='text' name='resultado[]' /></td></tr>
  20. <tr><td><input type='text' name='cantidad[]' value='10' />+</td><td><input type='text' name='caja[]'/>=</td><td><input type='text' name='resultado[]' /></td></tr>
  21. </form>
  22.  
  23. function Sumas(nombre_form){
  24. var f = document.forms[nombre_form],T = f.getElementsByTagName('tr'),i=0,l=T.length,Sum,all,
  25.  S = function(Prim,Seg,Ter){
  26.  // Proceso de suma
  27.  Sum = function(){Ter.value = (parseInt(Prim.value,10) || 0) + (parseInt(Seg.value,10) || 0)}
  28.  Seg.onkeyup = Sum
  29.  Ter.onfocus = Sum
  30.  Ter.onblur = Sum
  31.  return !0
  32. }, byName = function(T,name){
  33.  // Buscar atributo name
  34.  all = T.getElementsByTagName('*'),j=0
  35.  while(all[j].getAttribute('name') != name && j<all.length) j++
  36. return all[j]
  37. }
  38. // Sumar al teclear, salir de la caja, seleccionar caja...
  39. while(i<l && S(byName(T[i],'cantidad[]'), byName(T[i],'caja[]'), byName(T[i],'resultado[]'))) i++
  40. }
  41.  
  42. Sumas('autoSumForm')
  43. </script>
  44.  
  45.  
  46. </body>
  47. </html>

Agregando Tabla, aunque esta me interesa más.

Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Documento sin t&iacute;tulo</title>
  6.  
  7. </head>
  8.  
  9. <body>
  10. <form name="autoSumForm">
  11.   <table width="200" border="0">
  12.   <tr>
  13.     <th scope="col">Primera</th>
  14.     <th scope="col">Segunda</th>
  15.     <th scope="col">Tercera</th>
  16.   </tr>
  17.   <tr>
  18.     <td><input type='text' name='cantidad[]2' value='1'* /></td>
  19.     <td><input type='text' name='caja[]2'/></td>
  20.     <td><input type='text' name='resultado[]2' /></td>
  21.   </tr>
  22.   <tr>
  23.     <td><input type='text' name='cantidad[]3' value='56' /></td>
  24.     <td><input type='text' name='caja[]3'/></td>
  25.     <td><input type='text' name='resultado[]3' /></td>
  26.   </tr>
  27.   <tr>
  28.     <td><input type='text' name='cantidad[]4' value='7'* /></td>
  29.     <td><input type='text' name='caja[]4'/></td>
  30.     <td><input type='text' name='resultado[]4' /></td>
  31.   </tr>
  32.   <tr>
  33.     <td><input type='text' name='cantidad[]' value='10' /></td>
  34.     <td><input type='text' name='caja[]'/></td>
  35.     <td><input type='text' name='resultado[]' /></td>
  36.   </tr>
  37. </table>
  38. </form>
  39.  
  40. <script>
  41. function Sumas(nombre_form){
  42. var f = document.forms[nombre_form],T = f.getElementsByTagName('tr'),i=0,l=T.length,Sum,all,
  43.  S = function(Prim,Seg,Ter){
  44.  // Proceso de suma
  45.  Sum = function(){Ter.value = (parseInt(Prim.value,10) || 0) + (parseInt(Seg.value,10) || 0)}
  46.  Seg.onkeyup = Sum
  47.  Ter.onfocus = Sum
  48.  Ter.onblur = Sum
  49.  return !0
  50.  }, byName = function(T,name){
  51.  // Buscar atributo name
  52.  all = T.getElementsByTagName('*'),j=0
  53.  while(all[j].getAttribute('name') != name && j<all.length) j++
  54.  return all[j]
  55.  }
  56.  // Sumar al teclear, salir de la caja, seleccionar caja...
  57.  while(i<l && S(byName(T[i],'cantidad[]'), byName(T[i],'caja[]'), byName(T[i],'resultado[]'))) i++
  58. }
  59.  
  60. Sumas('autoSumForm')
  61. </script>
  62.  
  63. </body>

Te pido mis más sinceras disculpas por esto.

Gracias

Última edición por _Andrea_; 10/10/2011 a las 00:25
  #8 (permalink)  
Antiguo 10/10/2011, 08:28
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: Sumar Arrays

Dime, los input siempre tendrán el atributo name empezando por cantidad[]..., caja[]..., resultado[]... ?
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #9 (permalink)  
Antiguo 10/10/2011, 08:37
Avatar de _Andrea_  
Fecha de Ingreso: octubre-2011
Ubicación: Medellin
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sumar Arrays

Buenos días, te agradezco tu ayuda.

Si, los input siempre estarán así, sus nombres (name) con corchetes ([]), cantidad[], caja[], resultado[], con la tabla si se puede hacer esto.

Muchas gracias.
  #10 (permalink)  
Antiguo 10/10/2011, 09:26
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: Sumar Arrays

Cambia en el script:
Código Javascript:
Ver original
  1. function Sumas(nombre_form){
  2. var f = document.forms[nombre_form],T = f.getElementsByTagName('tr'),i=0,l=T.length,Sum,all,
  3.  S = function(Prim,Seg,Ter){
  4.     if(!Prim||!Seg||!Ter) return !0
  5.     // Proceso de suma
  6.     Sum = function(){Ter.value = (parseInt(Prim.value,10) || 0) + (parseInt(Seg.value,10) || 0)}
  7.     Seg.onkeyup = Sum
  8.     Ter.onfocus = Sum
  9.     Ter.onblur = Sum
  10.     return !0
  11.  }, byName = function(T,name){
  12.     // Buscar atributo name
  13.     all = T.getElementsByTagName('*'),j=0
  14.     if(T.getElementsByTagName('input').length < 3) return !1
  15.     while(!(new RegExp('^'+name,'gi').test(all[j].getAttribute('name'))) && j<all.length) j++
  16.     return all[j]
  17.  }
  18.  // Sumar al teclear, salir de la caja, seleccionar caja...
  19.  while(i<l && S(byName(T[i],'cantidad'), byName(T[i],'caja'), byName(T[i],'resultado'))) i++
  20. }
  21.  
  22. Sumas('autoSumForm')
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #11 (permalink)  
Antiguo 10/10/2011, 09:47
Avatar de _Andrea_  
Fecha de Ingreso: octubre-2011
Ubicación: Medellin
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sumar Arrays

Muchas, pero muchas gracias. No sabes la alegria y el gozo que siento. Te agradezco, una cosita, pero me podrías explicar que fue lo que cambio del script.

Gracias.
  #12 (permalink)  
Antiguo 10/10/2011, 11:41
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: Sumar Arrays

El script no encontraba los nombres cantidad[]2, caja[]2, etc de las cajas, ahora busca el atributo name que empiecen con el texto cantidad, usando expresiones, lo mismo para caja, resultado.

Ejem:
con el script anterior:
input name=cantidad[]2 //no encuentra, y da error
input name=cantidad[3] //no encuentra, y da error
el error se produce por que no encuentra el objeto con ese nombre
con el de ahora usando expresiones
input name=cantidad[]2 //lo encuentra, le aplica las funciones de suma
input name=cantidad[3] //lo encuentra, le aplica las funciones de suma
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #13 (permalink)  
Antiguo 10/10/2011, 11:56
Avatar de _Andrea_  
Fecha de Ingreso: octubre-2011
Ubicación: Medellin
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sumar Arrays

Muchas gracias, no sabes cuanto estoy agradecida contigo, y por la explicación y paciencia que tenias conmigo.

Gracias.

Etiquetas: arrays, funcion, html
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 06:29.