Foros del Web » Programando para Internet » Javascript »

Media aritmética de un formulario.

Estas en el tema de Media aritmética de un formulario. en el foro de Javascript en Foros del Web. Tengo un formulario donde hay campos con texto y números, intento hacer la media aritmética de los campos numéricos de tal forma que si el ...
  #1 (permalink)  
Antiguo 20/06/2005, 04:55
 
Fecha de Ingreso: junio-2005
Mensajes: 3
Antigüedad: 18 años, 10 meses
Puntos: 0
Media aritmética de un formulario.

Tengo un formulario donde hay campos con texto y números, intento hacer la media aritmética de los campos numéricos de tal forma que si el valor del campos es “0” pase al siguiente y que no tenga en cuenta dicho campo. ¿Podríais ayudarme?. Muchas gracias
  #2 (permalink)  
Antiguo 20/06/2005, 11:35
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61

<head>
<script>
function suma(esto){
elementos=0;
total=0;
for(a=0;a<esto.elements.length;a++){
numero=parseFloat(esto[a].value);
if(esto[a]>0){
elementos+=1;
total+=numero;
}
}
media=total/elementos;
alert(media);
}
</script></head>
<body>
<form name="pepe" onsubmit="return suma(this)">

... formulario...


</form>
</body>

Dime si te sirve!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #3 (permalink)  
Antiguo 21/06/2005, 05:01
 
Fecha de Ingreso: junio-2005
Mensajes: 3
Antigüedad: 18 años, 10 meses
Puntos: 0
Funciona perfectamente pero recorre todos los campos del formulario, mi intención es que sólo recorra ciertos campos que empiecen con el nombre por ejemplo: precio (precio1, precio2 etc…) pero no otros campos como: punit1, punit2 etc…., utilizando la función que me has enviado he añadido “precio'+a+'” intentando que sólo mire en los campos precio pero no me funciona, ¿tienes alguna idea para solucionarlo?. Adjunto te envío lo que estoy intentando hacer:

function suma(esto){
n=5;
elementos=0;
total=0;
for(a=0;a<5;a++){
numero=parseFloat(document.form.precio'+a+'.value) ;
if(document.form.precio'+a+'.value>0){
elementos+=1;
total+=numero;
}
}
media=total/elementos;
document.form.total.value = media;
}
</SCRIPT>
</head>

<body>
<form action="medi2.asp" method="post" name="form" onSubmit="return suma(this)"">
<p>NOMBRE
<input name="nombre" type="text" id="nombre">
</p>
<p>
Precio1
<input name="precio1" type="text" id="precio1" size="4" maxlength="4">
Punit1
<input name="punit1" type="text" id="punit1" size="4" maxlength="4">
</p>
<p>
Precio2
<input name="precio2" type="text" id="precio2" size="4" maxlength="4">
Punit2
<input name="punit2" type="text" id="punit2" size="4" maxlength="4">
</p>
<p>
Precio3
<input name="precio3" type="text" id="precio3" size="4" maxlength="4">
Punit2
<input name="punit3" type="text" id="punit3" size="4" maxlength="4">
</p>
<p>
Precio4
<input name="precio4" type="text" id="precio4" size="4" maxlength="4">
Punit2
<input name="punit4" type="text" id="punit4" size="4" maxlength="4">
</p>
<p>
Precio medio
<input name="total" type="text" id="total" size="6" maxlength="6">
</p>
<p>
<input type="submit" name="Submit" value="total">
</p>
</form>

¡¡ muchísimas gracias ¡!
  #4 (permalink)  
Antiguo 21/06/2005, 05:56
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Prueba con esto:
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<
html>
<
head>
<
script>
function 
suma(esto){
elementos=0;
total=0;
for(
a=1;esto["precio"+a];a++){
numero=parseFloat(esto["precio"+a].value);
if(
numero>0){
elementos+=1;
total+=numero;
}
}
media=total/elementos;
esto['total'].value=media;

}
</script></head>
<body>
<form action="medi2.asp" method="post" name="form" onSubmit="return suma(this)">
<p>NOMBRE
<input name="nombre" type="text" id="nombre">
</p>
<p>
Precio1
<input name="precio1" type="text" id="precio1" size="4" maxlength="4">
Punit1
<input name="punit1" type="text" id="punit1" size="4" maxlength="4">
</p>
<p>
Precio2
<input name="precio2" type="text" id="precio2" size="4" maxlength="4">
Punit2
<input name="punit2" type="text" id="punit2" size="4" maxlength="4">
</p>
<p>
Precio3
<input name="precio3" type="text" id="precio3" size="4" maxlength="4">
Punit2
<input name="punit3" type="text" id="punit3" size="4" maxlength="4">
</p>
<p>
Precio4
<input name="precio4" type="text" id="precio4" size="4" maxlength="4">
Punit2
<input name="punit4" type="text" id="punit4" size="4" maxlength="4">
</p>
<p>
Precio medio
<input name="total" type="text" id="total" size="6" maxlength="6">
</p>
<p>
<input type="submit" name="Submit" value="total">
</p>
</form>

</body>
</html> 
Un saludo!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #5 (permalink)  
Antiguo 21/06/2005, 06:39
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Por otra parte permiteme comentarte que la forma que tienes de manejar los formularios no es la correcta. En IE funcionará, pero me temo que en Firefox ocasionará alguna advertencia y en Mozilla probablemente no funcione.

La forma correcta de manejar los formularios es la siguiente:

document.forms['name_del_form'].elements['name_del_input']

Lo que tú pones así:

document.form.precio

debería ser:

document.forms['form'].elements['precio'];

Esto se puede comprimir quitando elements e incluso el forms poniendo:

document['form']['precio'];

Esto además te da mucha más libertad a la hora de llamar a los elementos de un formulario. La prueba está en el ejemplo que te he puesto antes.

Por otra parte en la llamada a la funcion ponemos onSubmit="return suma(this)". El this sirve para englobar el elemento que llama a la función, en este caso es el formulario. Por lo que en vez de poner document.forms['form'] podemos poner el nombre que se le ha puesto al declarar la función:

function suma(esto)

en este caso "esto" suplanta al formulario. Por lo que se puede poner:

esto['precio']

en vez de

document.forms['form']['precio']

Espero que te haya ayudado mi explicación. Un saludo!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #6 (permalink)  
Antiguo 21/06/2005, 07:30
 
Fecha de Ingreso: junio-2005
Mensajes: 3
Antigüedad: 18 años, 10 meses
Puntos: 0
¡¡ Funciona perfecto !! Muchísimas gracias, tomo buena nota tú explicación sobre el manejo de formularios, me ha sido de gran ayuda.

Saludos
  #7 (permalink)  
Antiguo 21/06/2005, 09:01
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Me alegro de que te sirviera!

Un saludo!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
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 05:17.