Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Calcular valor medio de cinco textbox

Estas en el tema de Calcular valor medio de cinco textbox en el foro de Javascript en Foros del Web. Hola, tengo una formulario donde, entre otras cosas, el usuario rellena cinco campos con valores numéricos y quiero que a medida que los ponga, en ...
  #1 (permalink)  
Antiguo 08/07/2013, 04:10
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Pregunta Calcular valor medio de cinco textbox

Hola, tengo una formulario donde, entre otras cosas, el usuario rellena cinco campos con valores numéricos y quiero que a medida que los ponga, en otro campo del formulario le vaya saliendo la media de esos campos. Los campos van el siguiente trozo de código:

Código HTML:
Ver original
  1. <table width="947" border="0">
  2.     <tr>
  3.       <th width="171" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Mediciones (mm) </span></th>
  4.       <th width="187" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 1 </span></th>
  5.       <th width="197" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 2 </span></th>
  6.       <th width="187" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 3 </span></th>
  7.       <th width="84" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 4 </span></th>
  8.       <th width="85" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 5 </span></th>
  9.     </tr>
  10.     <tr>
  11.       <td><strong>Fuerza (N)</strong></td>
  12.       <td align="center" valign="middle"><input name="T3-m1-9999" type="text" class="meta" id="T3-m1-9999" /></td>
  13.       <td align="center" valign="middle"><input name="T3-m2-9999" type="text" class="meta" id="T3-m2-9999" /></td>
  14.       <td align="center" valign="middle"><input name="T3-m3-9999" type="text" class="meta" id="T3-m3-9999" /></td>
  15.       <td align="center" valign="middle"><input name="T3-m4-9999" type="text" class="meta" id="T3-m4-9999" /></td>
  16.       <td align="center" valign="middle"><input name="T3-m5-9999" type="text" class="meta" id="T3-m5-9999" /></td>
  17.     </tr>
  18.   </table>
  19.   <p><br />
  20.     Valor medio F =
  21.       <input name="T3-media-202" type="text" class="meta" id="T3-media-202" readonly="yes" />
  22.       N </p>

El usuario iría rellenando los campos T3-m1-9999, T3-m2-9999... y el valor medio le iría saliendo en el campo T3-media-202. Me daría igual que al calcular se dividiese siempre entre cinco, y no entre el número real de campos rellenados, ya que siempre tendrán que rellenarlos todos.

La verdad es que no tengo ni idea de como hacerlo. Imagino que será con un onchange de cada campo, que llame a la función que calcule la media, pero no le tengo nada claro.

Muchas gracias por adelantado, Salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 08/07/2013, 10:06
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Calcular valor medio de cinco textbox

en efecto, es así, define una función para calcular y llámala en en onchange u onblur de cada input
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 09/07/2013, 02:20
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Respuesta: Calcular valor medio de cinco textbox

El problema es que no tengo ni idea de como hacerlo. Ayer estuve probando, pero no iba de ninguna manera :( es el problema de no tener apenas idea de Javascript.
¿Algunas indicaciones de como hacerlo, por favor?

Salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #4 (permalink)  
Antiguo 09/07/2013, 03:29
 
Fecha de Ingreso: julio-2013
Mensajes: 87
Antigüedad: 10 años, 10 meses
Puntos: 9
Respuesta: Calcular valor medio de cinco textbox

Lo que tienes que hacer es en el onkeyup de cualquier input llamar a una función que revise los 5 inputs y así puedes obtener la media. Lo puedes hacer en otros eventos como onblur, pero eso ya depende de lo que quieras. Con lo que te pego a continuación he descartado los inputs que estén vacíos o que no sean valores enteros.

Código HTML:
Ver original
  1.     function calcularMedia(){
  2.         var suma = 0, num = 0;
  3.         var valor = document.getElementById('T3-m1-9999').value;
  4.         if (parseInt(valor, 10)){
  5.             suma+= parseInt(valor,10);
  6.             num++;
  7.         }
  8.         valor = document.getElementById('T3-m2-9999').value;
  9.         if (parseInt(valor, 10)){
  10.             suma+= parseInt(valor,10);
  11.             num++;
  12.         }
  13.         valor = document.getElementById('T3-m3-9999').value;
  14.         if (parseInt(valor, 10)){
  15.             suma+= parseInt(valor,10);
  16.             num++;
  17.         }
  18.         valor = document.getElementById('T3-m4-9999').value;
  19.         if (parseInt(valor, 10)){
  20.             suma+= parseInt(valor,10);
  21.             num++;
  22.         }
  23.         valor = document.getElementById('T3-m5-9999').value;
  24.         if (parseInt(valor, 10)){
  25.             suma+= parseInt(valor,10);
  26.             num++;
  27.         }
  28.  
  29.         // Calculamos la media
  30.         var media = suma/num;
  31.         document.getElementById('T3-media-202').value = media;
  32.     }
  33. <table width="947" border="0">
  34.     <tr>
  35.       <th width="171" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Mediciones (mm) </span></th>
  36.       <th width="187" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 1 </span></th>
  37.       <th width="197" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 2 </span></th>
  38.       <th width="187" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 3 </span></th>
  39.       <th width="84" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 4 </span></th>
  40.       <th width="85" bgcolor="#C78A0D" scope="col"><span class="Estilo1">Medida 5 </span></th>
  41.     </tr>
  42.     <tr>
  43.       <td><strong>Fuerza (N)</strong></td>
  44.       <td align="center" valign="middle"><input name="T3-m1-9999" type="text" class="meta" id="T3-m1-9999" onkeyup="calcularMedia();"/></td>
  45.       <td align="center" valign="middle"><input name="T3-m2-9999" type="text" class="meta" id="T3-m2-9999" onkeyup="calcularMedia();"/></td>
  46.       <td align="center" valign="middle"><input name="T3-m3-9999" type="text" class="meta" id="T3-m3-9999" onkeyup="calcularMedia();"/></td>
  47.       <td align="center" valign="middle"><input name="T3-m4-9999" type="text" class="meta" id="T3-m4-9999" onkeyup="calcularMedia();"/></td>
  48.       <td align="center" valign="middle"><input name="T3-m5-9999" type="text" class="meta" id="T3-m5-9999" onkeyup="calcularMedia();"/></td>
  49.     </tr>
  50.   </table>
  51.   <p><br />
  52.     Valor medio F =
  53.       <input name="T3-media-202" type="text" class="meta" id="T3-media-202" readonly="yes" />
  54.       N </p>
  #5 (permalink)  
Antiguo 09/07/2013, 03:34
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Respuesta: Calcular valor medio de cinco textbox

Perfecto, funciona de miedo, muchísimas gracias. Solo una duda más, ¿qué tendría que cambiar para que tuviese en cuenta también valores decimales?
Lo digo porque aun no me han confirmado si los valores serán siempre enteros o si pueden tener decimales, y en caso de tenerlos, lo tendría que tener en cuenta en el cálculo, claro.

Muchas gracias de nuevo!!! Salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #6 (permalink)  
Antiguo 09/07/2013, 03:49
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Respuesta: Calcular valor medio de cinco textbox

Si antes lo pregunto, antes me lo confirman. Efectivamente, los valores llevarán decimales!! He investigado un poco, y si no me equivoco sería de la siguiente manera:

Código Javascript:
Ver original
  1. <script>
  2.     function calcularMedia(){
  3.         var suma = 0, num = 0;
  4.         var valor = document.getElementById('T3-m1-9999').value;
  5.         if (parseFloat(valor)){
  6.             suma+= parseFloat(valor);
  7.             num++;
  8.         }
  9.         valor = document.getElementById('T3-m2-9999').value;
  10.         if (parseFloat(valor)){
  11.             suma+= parseFloat(valor);
  12.             num++;
  13.         }
  14.         valor = document.getElementById('T3-m3-9999').value;
  15.         if (parseFloat(valor)){
  16.             suma+= parseFloat(valor);
  17.             num++;
  18.         }
  19.         valor = document.getElementById('T3-m4-9999').value;
  20.         if (parseFloat(valor)){
  21.             suma+= parseFloat(valor);
  22.             num++;
  23.         }
  24.         valor = document.getElementById('T3-m5-9999').value;
  25.         if (parseFloat(valor)){
  26.             suma+= parseFloat(valor);
  27.             num++;
  28.         }
  29.  
  30.         // Calculamos la media
  31.         var media = suma/num;
  32.        
  33.         document.getElementById('T3-media-202').value = parseFloat(media).toFixed(2);
  34.     }
  35. </script>

Así me tiene en cuenta los decimales, y el resultado lo muestra con solo decimales. Lo veis correcto?
__________________
Vayamos por Partes :: Jack el Destripador
  #7 (permalink)  
Antiguo 09/07/2013, 03:54
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Respuesta: Calcular valor medio de cinco textbox

Aunque se me plantea una nueva duda... de esta forma, solo me tiene en cuenta los decimales si van separados por un punto, es decir, 10.55

Hay alguna forma de que tenga en cuenta el valor si va separado por una coma? Y que el resultado lo muestre también con una coma y no con un punto?
__________________
Vayamos por Partes :: Jack el Destripador
  #8 (permalink)  
Antiguo 09/07/2013, 04:03
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Respuesta: Calcular valor medio de cinco textbox

Pues nada, ya lo tengo resuelto también después de investigar un poco más. Básicamente lo que hago es que al leer el valor del textbox, reemplazo las comas por puntos antes de hacer nada, a continuación se hacen todas las operaciones, y para finalizar, antes de mostrar el resultado vuelvo a reemplazar el punto por una coma y listo. Dejo aquí la función modificada por si a alguien le viene bien.

Código Javascript:
Ver original
  1. <script>
  2.     function calcularMedia(){
  3.         var suma = 0, num = 0;
  4.         var valor = document.getElementById('T3-m1-9999').value.replace(',', '.');
  5.         if (parseFloat(valor)){
  6.             suma+= parseFloat(valor);
  7.             num++;
  8.         }
  9.         valor = document.getElementById('T3-m2-9999').value.replace(',', '.');
  10.         if (parseFloat(valor)){
  11.             suma+= parseFloat(valor);
  12.             num++;
  13.         }
  14.         valor = document.getElementById('T3-m3-9999').value.replace(',', '.');
  15.         if (parseFloat(valor)){
  16.             suma+= parseFloat(valor);
  17.             num++;
  18.         }
  19.         valor = document.getElementById('T3-m4-9999').value.replace(',', '.');
  20.         if (parseFloat(valor)){
  21.             suma+= parseFloat(valor);
  22.             num++;
  23.         }
  24.         valor = document.getElementById('T3-m5-9999').value.replace(',', '.');
  25.         if (parseFloat(valor)){
  26.             suma+= parseFloat(valor);
  27.             num++;
  28.         }
  29.  
  30.         // Calculamos la media
  31.         var media = suma/num;
  32.         media = parseFloat(media).toFixed(2);
  33.         media = media.replace('.', ',');
  34.         document.getElementById('T3-media-202').value = media;
  35.     }
  36. </script>
__________________
Vayamos por Partes :: Jack el Destripador

Etiquetas: calcular, campos, formulario, media
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 00:32.