Foros del Web » Programando para Internet » Javascript »

Calculos algo avanzados para mí

Estas en el tema de Calculos algo avanzados para mí en el foro de Javascript en Foros del Web. Hola a todos. Bueno, pues lo cierto es que empecé ayer con esto del javascript, concretamente esta mañana, y creo que estoy tratando de hacer ...
  #1 (permalink)  
Antiguo 09/05/2011, 17:08
 
Fecha de Ingreso: mayo-2011
Mensajes: 65
Antigüedad: 13 años, 6 meses
Puntos: 3
Calculos algo avanzados para mí

Hola a todos. Bueno, pues lo cierto es que empecé ayer con esto del javascript, concretamente esta mañana, y creo que estoy tratando de hacer algo demasiado complejo para mi nivel y no estoy teniendo buenos resultados, o al menos no tan buenos como yo me esperaba.

Estoy tratando de hacer una calculadora de stats en base a un videojuego para postearla en un foro. Ya había hecho antes páginas web (concretamente plantillas gratuitas) con HTML y CSS, pero es la primera vez que toco Javascript y quiero adentrarme más en todo esto. He estado leyendo bastantes manuales, pero aun así parece que se vea todo de forma bastante básica y cuando trato de anidar secuencias desde otros puntos todo se me viene abajo y no sale lo que yo busco.
He conseguido hacer funcionar códigos sencillos de esta forma como un document.write o cosas así, pero cuando se trata de sumar distintas opciones de un formulario.. nada.

La cosa es la siguiente, tengo tres páginas.
Una, es la que verán los usuarios al entrar y es donde está la calculadora. Ésta está formada por una serie de campos de formulario que los usuarios pueden editar a su antojo para dar unos números. Dependiendo de los números que den la web calculará y les dirá el resultado final.

Como segunda página tengo una página en la que incluyo la descripción del programa y en la que se mostrará el resultado del cálculo. Ésta está unida mediante un iframe a la página inicial, para poder ver el resultado sin salirme de esa página.

Por último tengo el archivo .js que es donde estoy haciendo los scripts de los cálculos. Lo tengo unido a la página inicial mediante el código.
Aquí pongo los códigos que estoy tratando de editar para obtener resultados:

Página inicial:
(Pongo parte del código, lo importante, me estoy saltanto aspectos como head y demás pero esos están incluidos, no creais que por no ponerlos no están xD)

Código HTML:
<script src="scripts/calc.js"></script>
</head>

<body text="#FFFFFF" bgcolor="#000000" style=" font-family:Georgia, 'Times New Roman', Times, serif;">
<div align="center"><img src="bannercalculadoras.png" width="498" height="117" />
<form method="post" action="ivcalculator.html" target="dvwindow" name="dvcalc" id="dvcalc">
<table width="75%" cellpadding="2" cellspacing="0" border="1" style="text-align: center;" class="calculator">
<tr>
 <td class="headerstyle">Elige</td>
 <td colspan="6">
 <select name="pokemon" class="select">
<option value="494">Opción</option> //solamente pongo una opción de momento
 </select>
 </td>
</tr>
<tr>
 <td class="headerstyle">Nivel</td>
 <td colspan="6"><input type="text" name="level" readonly="readonly" size="3" maxlength="3" value="100" class="text" /></td>
</tr>
<tr class="headerstyle">
  <td width="14%" class="headerstyle">&nbsp;</td>
  <td width="14%">PS</td>
  <td width="14%">Ataque</td>
  <td width="14%">Defensa</td>
  <td width="14%">At. Especial</td>
  <td width="14%">Def. Especial</td>
  <td width="14%">Velocidad</td>
</tr>
<tr>
 <td class="headerstyle">Stats</td>
 <td><input type="text" id="hpstat" name="hpstat" size="3" maxlength="3" value="" class="text" /></td>
 <td><input type="text" id="atkstat" name="atkstat" size="3" maxlength="3" value="" class="text" /></td>
 <td><input type="text" id="defstat" name="defstat" size="3" maxlength="3" value="" class="text" /></td>
 <td><input type="text" id="sastat" name="sastat" size="3" maxlength="3" value="" class="text" /></td>
 <td><input type="text" id="sdstat" name="sdstat" size="3" maxlength="3" value="" class="text" /></td>
 <td><input type="text" id="spdstat" name="spdstat" size="3" maxlength="3" value="" class="text" /></td>
</tr>
<tr>
 <td class="headerstyle">EVs (Effort Values)</td>
 <td><input type="text" id="hpev" name="hpev" size="3" maxlength="3" value="0" class="text" disabled="disabled" /></td>
 <td><input type="text" id="atkev" name="atkev" size="3" maxlength="3" value="0" class="text" disabled="disabled" /></td>
 <td><input type="text" id="defev" name="defev" size="3" maxlength="3" value="0" class="text" disabled="disabled" /></td>
 <td><input type="text" id="saev" name="saev" size="3" maxlength="3" value="0" class="text" disabled="disabled" /></td>
 <td><input type="text" id="sdev" name="sdev" size="3" maxlength="3" value="0" class="text" disabled="disabled" /></td>
 <td><input type="text" id="spdev" name="spdev" size="3" maxlength="3" value="0" class="text" disabled="disabled" /></td>
</tr>

<tr>
 <td class="headerstyle">Naturaleza</td>
 <td colspan="6">
 <select name="personality" class="select">
 	<option value="none">Ninguna</option>
 </select>
 </td>
</tr>
<tr><td colspan="7"><input type="submit" value="Calcular" id="btn_eps" name="submit" class="button" onclick="javascript:calc_ivs()" /></td></tr>
</table></form>
<br><br>
<script>
	var hpstat = "hpstat"
	var atkstat = "atkstat"
	var defstat = "defstat"
	var sastat = "sastat"
	var sdstat = "sdstat"
	var spdstat = "spdstat"
	var iv_calc = "iv_calc"
</script>
<iframe name="dvwindow" style="border: 0px;" width="75%" height="420" src="ivcalculator.html" scrolling="no" frameborder="0"> 
Luego viene el código, en este caso solamente marco una linea como editable, puesto que no sé que más poner.
En esta página es en la que se mostraría el resultado:

Código HTML:
<script src="scripts/calc.js"></script>
</head>

<body style="margin: 3px; font-family:Georgia, 'Times New Roman', Times, serif;" text="#FFFFFF">
<script>
	calc_ivs()
</script> 
Y por último esto es lo que llevo hecho de script, en el .js:

Código PHP:
// JavaScript Document


function calc_ivs() //Manejo simple de IVs.
{
    function 
validate_stats(hpstat,atkstat,defstat,sastat,sdstat,spdstat) {
        var 
hpstat "hpstat"
        
var atkstat "atkstat"
        
var defstat "defstat"
        
var sastat "sastat"
        
var sdstat "sdstat"
        
var spdstat "spdstat"
        
if ($('btn-eps'),"click"calc_ivs) {
     return 
math.floor (iv_calc = (hpstat atkstat defstat sastat sdstat spdstat)) };
     
alert ("Prueba");
    }
    
}

function 
initO() { //Actions to perform once the page has loaded
    
$('form').reset(); //reset all fields
    
toggle_theme();
    
tooltips();
    
display_status('<span class="loading">Inicializando...</span>');
    $(
'calculator').style.minHeight = (1*(window.innerHeight?window.innerHeight:(document.body?document.body.clientHeight:''))-16)+'px'/* remove this when including */
    
$('ept').style.visibility 'hidden';
    $(
'mode1').style.display 'none';
    
toggle($('history'));
    
    
        
event_add($('btn-eps'),"click"calc_ivs);
    

He puesto esa alerta de prueba para ver si al pulsar el botón de calcular por lo menos sale la alerta, eso me indicaría que al menos llega hasta ese punto, pero la alerta no sale, así que en algo fallo.

Lo que busco es que tome los números que el usuario pondrá en los campos del formulario llamados hpstat, atkstat, defstat, sastat, sdstat y spdstat y los calcule mediante un script.
De momento lo he puesto como suma, aunque el script realmente es más complejo. Lo he puesto como suma porque es una operación sencilla y de momento solamente quiero ver si funciona. Si consigo hacer la operación de suma ya pasaría a reformular esa operación ya que es muchísimo más compleja.

Gracias !
  #2 (permalink)  
Antiguo 09/05/2011, 17:32
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Calculos algo avanzados para mí

buenas,
lo primero es que siempre revises la consola de errores del navegador. este te dara informacion si algo mal esta sucediendo en el codigo. ahora bien, basandome en lo que veo.
  • la condicion if de la funcion validate_stats esta un tanto mal. si bien la sintaxis es valida, en realidad el interprete solo tomara en cuenta la ultima expresion (calc_ivs) para determinar si entrar al bloque o no. supongo que ahi quisistes realizar otra cosa que no es la que actualmente demuestra. en este caso, la ultima expresion siempre dara true porque hace referencia a una funcion. y una funcion convertida a boolean evalua como true.
  • notese que tienes una funcion dentro de la otra. es decir, validate_stats esta dentro de calc_ivs. de modo que al invocar calc_ivs, en ningun punto se invoca validate_stats. lo que significa que en si esa parte del codigo no se interpreta.
  • por ultimo, referente a la condicion if descrita en el primer punto. en este bloque tienes un return. esto causa que el interprete salga de dicha funcion devolviendo un valor sin interpretar el resto del codigo faltante. por tanto, jamas veras el alert del final.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 09/05/2011 a las 17:37
  #3 (permalink)  
Antiguo 09/05/2011, 17:46
 
Fecha de Ingreso: mayo-2011
Mensajes: 65
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Calculos algo avanzados para mí

Gracias zero, voy a tener en cuenta revisar la consola porque no había caido en eso.
He tratado de editar pero no he conseguido nada. Supongo que tendré que ponerme más al día en todo esto..

Lo cierto es que no entiendo demasiado el uso de $, he intentado buscar en google pero no he encontrado gran cosa.

Sobre como hacer que un usuario escriba en un formulario y eso acabe en una operación, por ejemplo sumando los números que el puso en ese formulario es lo que me haría falta saber.

Un saludo.

Etiquetas: calculadora, math, operadores
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 11:24.