Foros del Web » Programando para Internet » Javascript »

¿Como podría optimizar este script?

Estas en el tema de ¿Como podría optimizar este script? en el foro de Javascript en Foros del Web. Hola! Finalmente he conseguido hacer mi primer script con la ayuda desinteresada de p3rikl3s, muchas gracias! Creo que funciona todo correctamente, pero veo que repito ...
  #1 (permalink)  
Antiguo 07/02/2009, 07:11
 
Fecha de Ingreso: enero-2006
Ubicación: Barcelona, España
Mensajes: 126
Antigüedad: 18 años, 4 meses
Puntos: 1
¿Como podría optimizar este script?

Hola!

Finalmente he conseguido hacer mi primer script con la ayuda desinteresada de p3rikl3s, muchas gracias!

Creo que funciona todo correctamente, pero veo que repito una función tres veces seguidas y otra función dos veces más. Me gustaria saber si hay algun modo reducir todo este código y en caso de ser cierto, que deberia de hacer?

Muchas gracias!

Código:
<script language="javascript">

function multiplica1(form){
var resultado;
var x=0;
var kglu = 4.1;
var kptes = 4.2;
var klip = 9.3;
x = parseFloat (form.num1.value);
resultado = x * kglu;
form.res1.value=resultado;
}
</script>

<script language="javascript">
function multiplica2(form){
var resultado;
var x=0;
var kglu = 4.1;
var kptes = 4.2;
var klip = 9.3;
y = parseFloat (form.num2.value);
resultado = y * klip;
form.res2.value=resultado;
}
</script>
<script language="javascript">
function multiplica3(form){
var resultado;
var x=0;
var kglu = 4.1;
var kptes = 4.2;
var klip = 9.3;
z = parseFloat (form.num3.value);
resultado = z * kptes;
form.res3.value=resultado;
}
</script>

<script language="javascript">
function suma1(form){
var resultado;
x = parseFloat (form.num1.value);
y = parseFloat (form.num2.value);
z = parseFloat (form.num3.value);
resultado = x + y + z;
form.num4.value=resultado;
}
</script>

<script language="javascript">
function suma2(form){
var resultado;
x = parseFloat (form.res1.value);
y = parseFloat (form.res2.value);
z = parseFloat (form.res3.value);
resultado = x + y + z;
form.res4.value=resultado;
}
</script>

<form>
<TABLE BORDER=1 CELLPADDING=8>

<TR> <TD></TD><TD>Gramos consumidos</TD><TD>KCalorías consumidas</TD></TR>     
 
<tr><td>Hidratos de carbono</td><td><input name="num1" type="text" value="" onBlur="multiplica1(this.form)"/></td><td><input name="res1" type="text" value=""/></td></tr>

<tr> <td>Lípidos</td><td><input name="num2" type="text" value="" onBlur="multiplica2(this.form)"/></td><TD><input name="res2" type="text" value=""/></TD></tr>

<tr> <td>Proteínas</td><td><input name="num3" type="text" value="" onBlur="multiplica3(this.form)"/></td><td><input name="res3" type="text" value="" onBlur="suma1(this.form)"/></td></tr>

<tr> <td>Total</td><td><input name="num4" type="text" value=""/></td><td><input name="res4" type="text" value="" onBlur="suma2(this.form)"/></td></tr>

</table>
</form>
  #2 (permalink)  
Antiguo 07/02/2009, 18:30
Avatar de programeitor  
Fecha de Ingreso: febrero-2005
Mensajes: 994
Antigüedad: 19 años, 3 meses
Puntos: 9
Respuesta: ¿Como podría optimizar este script?

hola, en principio puedes poner todas las funciones en el mismo script.

He echo lo que pensabas que deberia ser, no andabas muy descaminado, solo habia que comprobar que hacia diferentes a las funciones, y realizar una sola pasandole esa diferencia y adecuando la funcion para captarla. Ademas he eliminado variables que no son nesesarias.

Código:
<script type="text/javascript">
function multiplica(form,n){
var k
switch(n)
{
case 1:{k=4.1;break}//kglu
case 2:{k=9.3;break}//klip
case 3:{k=4.2;break}//kptes
}
form["res"+n].value=parseFloat(form["num"+n].value)*k
}
 
function suma(form,n){
form[n+"4"].value=
parseFloat(form[n+"1"].value)+
parseFloat(form[n+"2"].value)+
parseFloat(form[n+"3"].value)
}
</script>

Aqui el form es el mismo, salvo que se llama a una funcion generica pasandole la diferencia señalada, que en el caso de la multiplicacion es el nº de campo (1,2 o 3), y en el de la suma el tipo de campo (num o res).

Código HTML:
<form>
<TABLE BORDER=1 CELLPADDING=8>
<TR>
<TD></TD>
<TD>Gramos consumidos</TD>
<TD>KCalorías consumidas</TD>
</TR> 
 
<tr>
<td>Hidratos de carbono</td>
<td><input name="num1" type="text" value="200" onBlur="multiplica(this.form,1)"/></td>
<td><input name="res1" type="text" value=""/></td>
</tr>
 
<tr>
<td>Lípidos</td>
<td><input name="num2" type="text" value="100" onBlur="multiplica(this.form,2)"/></td>
<TD><input name="res2" type="text" value=""/></TD>
</tr>
 
<tr>
<td>Proteínas</td>
<td><input name="num3" type="text" value="200" onBlur="multiplica(this.form,3)"/></td>
<td><input name="res3" type="text" value="" onBlur="suma(this.form,'num')"/></td>
</tr>
 
<tr>
<td>Total</td>
<td><input name="num4" type="text" value=""/></td>
<td><input name="res4" type="text" value="" onBlur="suma(this.form,'res')"/></td>
</tr>
 
</table>
</form> 
Saludos.

Última edición por programeitor; 07/02/2009 a las 18:53
  #3 (permalink)  
Antiguo 08/02/2009, 17:18
 
Fecha de Ingreso: enero-2006
Ubicación: Barcelona, España
Mensajes: 126
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: ¿Como podría optimizar este script?

Muchas gracias programeitor por la ayuda! Mañana me voy a mirar todo el código que me has puesto y lentamente iré entendiendolo mejor.

Creo que a partir de lo que me has hecho con un poco de tiempo podré ir incluyéndole más calculos sencillos, modificando pequeñas cosas.

En cuanto tenga algo con cara y ojos, ya os lo enseñaré.

Muchas gracias una vez más!
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 21:10.