Foros del Web » Programando para Internet » Javascript »

funcion evaporacion falla y no se porque

Estas en el tema de funcion evaporacion falla y no se porque en el foro de Javascript en Foros del Web. Este codigo sirve para que me difumine y me mueva hacia arriba un div, lo que pasa es que como vereis he puesto alerts para ...
  #1 (permalink)  
Antiguo 27/11/2009, 10:11
 
Fecha de Ingreso: junio-2008
Mensajes: 53
Antigüedad: 15 años, 10 meses
Puntos: 1
funcion evaporacion falla y no se porque

Este codigo sirve para que me difumine y me mueva hacia arriba un div, lo que pasa es que como vereis he puesto alerts para verlo, pero el setTimeout no hace nada, es decir aparece el ultimo alert conla id, y luego no vuelva a salir nada mas , cunaod deberia volver ha salir los mismo porque esta ahi ese setTimeout

El resto creo que funciona, alguien me puede ayudar

Código PHP:
= new Array();
        
a[0] = 1;
        
a[1] = 50;
        function 
valorizer(ID){
            
//lastCalled obtiene el valor que le toca
            
alert(ID);
            
lastCalled(a[0],a[1]);
            
fundido(a[0],a[1],ID);

            
//para que no este llamando hasta el infinito
            //if(a[0] >= 0 && a[1] >= 14){
                
                
                
alert("llama "+a[0]+","+a[1]);
            
//}
            
setTimeout("valorizer(ID)",60);
            
alert(ID);
        }
        
        function 
fundido(opa,pos,id){
            
//cambia la opacidad de los 2 divs
            
document.getElementsByName(id)[0].style["opacity"] = opa;
            
document.getElementsByName(id)[0].style["padding-top"] = pos;
        }
        function 
lastCalled(numA,numB){
            
//segun el valor que se introduzca se devuelve el siguiente que toca
            
ret = new Array();
            if(
numA == 1){
                
ret[0] = 0.9;
                
ret[1] = 46;
            }
            
alert(numA);
            if(
numA == 0.9){
                
ret[0] = 0.8;
                
ret[1] = 42;
            }
            if(
numA == 0.8){
                
ret[0] = 0.7;
                
ret[1] = 42;
            }
            if(
numA == 0.7){
                
ret[0] = 0.6;
                
ret[1] = 38;
            }
            if(
numA == 0.6){
                
ret[0] = 0.5;
                
ret[1] = 34;
            }
            if(
numA == 0.5){
                
ret[0] = 0.4;
                
ret[1] = 30;
            }
            if(
numA == 0.4){
                
ret[0] = 0.3;
                
ret[1] = 26;
            }
            if(
numA == 0.3){
                
ret[0] = 0.2;
                
ret[1] = 22;
            }
            if(
numA == 0.2){
                
ret[0] = 0.1;
                
ret[1] = 18;
            }
            if(
numA == 0.1){
                
ret[0] = 0.0;
                
ret[1] = 14;
            }
            return 
ret;

        } 
saludos¡
  #2 (permalink)  
Antiguo 27/11/2009, 11:23
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
Puntos: 1485
Respuesta: funcion evaporacion falla y no se porque

Código:
// cambiar esta linea;
setTimeout("valorizer(ID)",60); 

//por esta;
setTimeout(function(){valorizer(ID)},60);
como lo tienes no te funciona porque el codigo de setTimeout se ejecuta en el contexto de windows entonces el codigo no logra ver la variable ID. con una funcion anonima funciona, aunque este se ejecute en el contexto del objeto window, porque las funciones crean un closure (cierre) en el scope. se le dice cierre cuando la variable es usada en una funcion que no define dicha dicha variable. en este caso, la funcion anonima invoca la funcion valorizer el cual pasa como argumento la variable ID. como veras, en la funcion anonima no se define la variable ID pero si se utiliza el cual le pertenece al scope de la funcion anterior. puedes buscar mas informacion acerca de esta caracteristica con terminos javascript closure.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 27/11/2009, 12:54
 
Fecha de Ingreso: junio-2008
Mensajes: 53
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: funcion evaporacion falla y no se porque

ya lo he cambiado , pero tal cual lo has puesto tu, y no termina de tirar, podria ser que el error estuviese en otro sitio, por si sirve de algo la funcion valorizer se llama desde un onclick en un input

saludos y gracias
  #4 (permalink)  
Antiguo 27/11/2009, 23:55
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
Puntos: 1485
Respuesta: funcion evaporacion falla y no se porque

no puedo ayudarte con mas eficacia sin antes ver la aplicacion de forma mas completa. quiero decir, donde esta la parte html. como invocas la funcion. que valor le pasas a la funcion. de momento, lo otro que puedo ver mal es la propiedad padding-top.
Código:
document.getElementsByName(id)[0].style["paddingTop"]
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 29/11/2009, 05:09
 
Fecha de Ingreso: junio-2008
Mensajes: 53
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: funcion evaporacion falla y no se porque

Este es html, muchas gracias por echarme una mano, este html se forma a partir de un bucle en php, asi cada id que aparece es puesta en el html mediante php y un template.
Código HTML:
<br>

<table width="530">
	
	<tbody><tr>
		<th>Campos utilizados</th>
		<th colspan="2">
			<font color="#00ff00">351</font> / <font color="#ff0000">366</font> El resto 15 Campos libres
		</th>
	</tr>
	<tr>
	<td class="l">
		<div name="1" id="1" width="120" height="120" style="padding: 50px; position: absolute; opacity: 1;" align="top"></div>
		<a href="infos.php?UniNum=1&amp;gid=1">
		<img src="skins/xnova/gebaeude/1.gif" align="top" border="0" height="120" width="120">
		</a>
	</td>
	
	
	<td class="l">
		<div name="14" id="14" width="120" height="120" style="padding: 50px; position: absolute; opacity: 1;" align="top"></div>
		<a href="infos.php?UniNum=1&amp;gid=14">
		<img src="skins/xnova/gebaeude/14.gif" align="top" border="0" height="120" width="120">
		</a>
	</td>
	<td class="l">
		<a href="infos.php?UniNum=1&amp;gid=14">Centro de Robótica</a> (Nivel 12)<br>
		Los centros de robótica se encargan de la produccion de robots especializados en la creación y desarrollo de las infraestructuras .<br>
		Requiere : Acero: <b style="color: lime;"> <span class="noresources">8.765.849</span></b> Silicio: <b style="color: lime;"> <span class="noresources">2.629.754</span></b> Tritio: <b style="color: lime;"> <span class="noresources">4.382.924</span></b> 
		<br>Tiempo : 00h 04m 02s
		<br><font color="#7f7f7f">Sobran : Acero: <b style="color: rgb(95, 127, 108);">1.226.697.214.999.779.328</b> Silicio: <b style="color: rgb(95, 127, 108);">1.032.999.029.689.981.861.888</b> Tritio: <b style="color: rgb(95, 127, 108);">44.557.207.039.886.360.576</b> </font>
	</td>
	<td class="k"><a href="javascript:valorizer(14)"><font color="#00ff00">Subir de Nivel  13</font></a></td>

	
	<td class="l">
		<a href="infos.php?UniNum=1&amp;gid=44">Arsenal de misiles</a> (Nivel 75)<br>
		El arsenal de misiles es un lugar estratégico donde los misiles son almcenados , para su posterior lanzamiento.<br>
		Requiere : Acero: <b style="color: red;"> <t title="-80.254.741.838.371.241.984"><span class="noresources">81.481.439.053.379.780.608</span></t></b> Silicio: <b style="color: lime;"> <span class="noresources">81.481.439.053.379.780.608</span></b> Tritio: <b style="color: lime;"> <span class="noresources">2.037.035.976.334.494.464</span></b> 
		<br>Tiempo : 40178224385d 0-17h 0-11m 0-55s
		<br><font color="#7f7f7f">Sobran : Acero: <b style="color: rgb(127, 95, 96);">-80.254.741.838.371.241.984</b> Silicio: <b style="color: rgb(95, 127, 108);">951.517.590.636.604.686.336</b> Tritio: <b style="color: rgb(95, 127, 108);">42.520.171.063.556.251.648</b> </font>
	</td>
        <!--ESTO ES EL LINK EN EL QUE EL USER PINCHA Y APARECE LA EVAPORACION-->
	<td class="k"><a href="javascript:valorizer(14)"><font color="#00ff00">Subir de Nivel  13</font></a></td>

</tr>
</tbody></table>
<script>
a = new Array();
        a[0] = 1;
        a[1] = 50;
        function valorizer(ID){
            //lastCalled obtiene el valor que le toca
            alert(ID);
            a = lastCalled(a[0],a[1]);
            fundido(a[0],a[1],ID);

            //para que no este llamando hasta el infinito
            //if(a[0] >= 0 && a[1] >= 14){
                
                
                alert("llama "+a[0]+","+a[1]);
            //}
            setTimeout(function(){valorizer(ID)},60);
            alert(ID);
        }
        
        function fundido(opa,pos,id){
            //cambia la opacidad de los 2 divs
            document.getElementsByName(id)[0].style["opacity"] = opa;
            document.getElementsByName(id)[0].style["paddingTop"] = pos;
        }
        function lastCalled(numA,numB){
            //segun el valor que se introduzca se devuelve el siguiente que toca
            ret = new Array();
            if(numA == 1){
                ret[0] = 0.9;
                ret[1] = 46;
            }
            alert(numA);
            if(numA == 0.9){
                ret[0] = 0.8;
                ret[1] = 42;
            }
            if(numA == 0.8){
                ret[0] = 0.7;
                ret[1] = 42;
            }
            if(numA == 0.7){
                ret[0] = 0.6;
                ret[1] = 38;
            }
            if(numA == 0.6){
                ret[0] = 0.5;
                ret[1] = 34;
            }
            if(numA == 0.5){
                ret[0] = 0.4;
                ret[1] = 30;
            }
            if(numA == 0.4){
                ret[0] = 0.3;
                ret[1] = 26;
            }
            if(numA == 0.3){
                ret[0] = 0.2;
                ret[1] = 22;
            }
            if(numA == 0.2){
                ret[0] = 0.1;
                ret[1] = 18;
            }
            if(numA == 0.1){
                ret[0] = 0.0;
                ret[1] = 14;
            }
            return ret;

        }  
	</script>
<br> 
  #6 (permalink)  
Antiguo 29/11/2009, 07:48
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
Puntos: 1485
Respuesta: funcion evaporacion falla y no se porque

este momento no tengo paciencia para explicar (mi disculpas), hoy estoy ante una situacion desesperante con mi equipo. a continuacion te dejo el codigo funcionando de la forma que lo intentabas hacer. analizalo.
Código:
<style>
div{
background:#999;
}
</style>

<table width="530">
	
	<tbody><tr>
		<th>Campos utilizados</th>
		<th colspan="2">
			<font color="#00ff00">351</font> / <font color="#ff0000">366</font> El resto 15 Campos libres
		</th>
	</tr>
	<tr>
	<td class="l">
		<div name="1" id="one" width="120" height="120" style="padding: 50px; position: absolute; opacity: 1;" align="top"></div>
		<a href="infos.php?UniNum=1&amp;gid=1">
		<img src="skins/xnova/gebaeude/1.gif" align="top" border="0" height="120" width="120">
		</a>
	</td>
	
	
	<td class="l">
		<div name="14" id="fourteen" width="120" height="120" style="padding: 50px; position: absolute; opacity: 1;" align="top"></div>
		<a href="infos.php?UniNum=1&amp;gid=14">
		<img src="skins/xnova/gebaeude/14.gif" align="top" border="0" height="120" width="120">
		</a>
	</td>
	<td class="l">
		<a href="infos.php?UniNum=1&amp;gid=14">Centro de Robótica</a> (Nivel 12)<br>
		Los centros de robótica se encargan de la produccion de robots especializados en la creación y desarrollo de las infraestructuras .<br>
		Requiere : Acero: <b style="color: lime;"> <span class="noresources">8.765.849</span></b> Silicio: <b style="color: lime;"> <span class="noresources">2.629.754</span></b> Tritio: <b style="color: lime;"> <span class="noresources">4.382.924</span></b> 
		<br>Tiempo : 00h 04m 02s
		<br><font color="#7f7f7f">Sobran : Acero: <b style="color: rgb(95, 127, 108);">1.226.697.214.999.779.328</b> Silicio: <b style="color: rgb(95, 127, 108);">1.032.999.029.689.981.861.888</b> Tritio: <b style="color: rgb(95, 127, 108);">44.557.207.039.886.360.576</b> </font>
	</td>
	<td class="k"><a href="javascript:valorizer('one')"><font color="#00ff00">Subir de Nivel  13</font></a></td>

	
	<td class="l">
		<a href="infos.php?UniNum=1&amp;gid=44">Arsenal de misiles</a> (Nivel 75)<br>
		El arsenal de misiles es un lugar estratégico donde los misiles son almcenados , para su posterior lanzamiento.<br>
		Requiere : Acero: <b style="color: red;"> <t title="-80.254.741.838.371.241.984"><span class="noresources">81.481.439.053.379.780.608</span></t></b> Silicio: <b style="color: lime;"> <span class="noresources">81.481.439.053.379.780.608</span></b> Tritio: <b style="color: lime;"> <span class="noresources">2.037.035.976.334.494.464</span></b> 
		<br>Tiempo : 40178224385d 0-17h 0-11m 0-55s
		<br><font color="#7f7f7f">Sobran : Acero: <b style="color: rgb(127, 95, 96);">-80.254.741.838.371.241.984</b> Silicio: <b style="color: rgb(95, 127, 108);">951.517.590.636.604.686.336</b> Tritio: <b style="color: rgb(95, 127, 108);">42.520.171.063.556.251.648</b> </font>
	</td>
        <!--ESTO ES EL LINK EN EL QUE EL USER PINCHA Y APARECE LA EVAPORACION-->
	<td class="k"><a href="javascript:valorizer('fourteen')"><font color="#00ff00">Subir de Nivel  13</font></a></td>

</tr>
</tbody></table>
<script>
a = new Array();
        a[0] = 1;
        a[1] = 50;
        function valorizer(ID){
            //lastCalled obtiene el valor que le toca
            //alert(ID);
            a = lastCalled(a[0],a[1]);

            //para que no este llamando hasta el infinito
            if(a[0] >= 0 && a[1] >= 14){
                
            fundido(a[0],a[1],ID);
            setTimeout(function(){valorizer(ID)},60);    
                //alert("llama "+a[0]+","+a[1]);
            }
            
            //alert(ID);
        }
        
        function fundido(opa,pos,id){
            //cambia la opacidad de los 2 divs
            document.getElementById(id).style["opacity"] = opa;
            document.getElementById(id).style["paddingTop"] = pos + "px";
        }
        function lastCalled(numA,numB){
            //segun el valor que se introduzca se devuelve el siguiente que toca
            ret = new Array();
            if(numA == 1){
                ret[0] = 0.9;
                ret[1] = 46;
            }
            //alert(numA);
            if(numA == 0.9){
                ret[0] = 0.8;
                ret[1] = 42;
            }
            if(numA == 0.8){
                ret[0] = 0.7;
                ret[1] = 42;
            }
            if(numA == 0.7){
                ret[0] = 0.6;
                ret[1] = 38;
            }
            if(numA == 0.6){
                ret[0] = 0.5;
                ret[1] = 34;
            }
            if(numA == 0.5){
                ret[0] = 0.4;
                ret[1] = 30;
            }
            if(numA == 0.4){
                ret[0] = 0.3;
                ret[1] = 26;
            }
            if(numA == 0.3){
                ret[0] = 0.2;
                ret[1] = 22;
            }
            if(numA == 0.2){
                ret[0] = 0.1;
                ret[1] = 18;
            }
            if(numA == 0.1){
                ret[0] = 0.0;
                ret[1] = 14;
            }
            return ret;

        }  
	</script>
<br>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 02/12/2009, 14:03
 
Fecha de Ingreso: junio-2008
Mensajes: 53
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: funcion evaporacion falla y no se porque

Muchisimas gracias, no habia tenido tiempo de probarlo hasta hoy, pero no comprendo porque fourteen y no 14?
  #8 (permalink)  
Antiguo 02/12/2009, 15:07
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
Puntos: 1485
Respuesta: funcion evaporacion falla y no se porque

porque los IDs tienen unas normas para los valores. las normas son basicamente las mismas para nombrar variables, no puede comenzar por numeros. o sea, debe comenzar por cualquiera de las letras de la A-Z (minuscula o mayuscula) seguido de cualquier combinacion de los siguientes caracteres: A-Z, a-z, 0-9, .(punto), _.
http://www.w3schools.com/tags/att_standard_id.asp
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
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 12:15.