Foros del Web » Programando para Internet » Javascript »

Problema con recursividad en IE

Estas en el tema de Problema con recursividad en IE en el foro de Javascript en Foros del Web. buenas, nuevamente con problemas en explorer, esta vez quiero hacer algo sencillo, que una funcion de llame a si misma despues de cierto tiempo y ...
  #1 (permalink)  
Antiguo 16/10/2005, 19:27
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 4 meses
Puntos: 4
Problema con recursividad en IE

buenas, nuevamente con problemas en explorer, esta vez quiero hacer algo sencillo, que una funcion de llame a si misma despues de cierto tiempo y que ademas se pase un parametro..
Esto, segun lo que dice ACA se hace de esta forma:

Ejemplo sencillo
Código HTML:
var asd = 0;
function test(objeto)
{
	asd += 10;
	objeto.style.color = "rgb(140,140," + asd + ")";
	setTimeout(test, 1000, objeto);
}
Bueno esto funciona solo en firefox y opera, en el fucking IE objeto es undefined. tambien probe estas formas:

setTimeout("test", 1000, objeto);
setTimeout("test()", 1000, objeto);
setTimeout("test(objeto)", 1000);

y no hay caso.

alguna idea?

saludos.
__________________
Internet Explorer SuckS
Download FireFox
  #2 (permalink)  
Antiguo 17/10/2005, 01:35
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
Buenas,

pídeselo así

Código:
var asd = 0;
function test(objeto)
{
	objeto2 = objeto
	asd += 10;
	objeto.style.color = "rgb(140,140," + asd + ")";
	setTimeout("test(objeto2)", 1000);
}
  #3 (permalink)  
Antiguo 17/10/2005, 01:57
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola:

Veo que como siempre se me adelantó tunait (¡Hola !)

Muchas veces es mejor poner el objeto entrecomillado...

setTimeout("test('" + objeto + "')", 1000);

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 17/10/2005, 10:35
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 4 meses
Puntos: 4
no me funciona :( dice "el objeto no acepta esta propiedad o metodo", tampoco funciona en firefox..
__________________
Internet Explorer SuckS
Download FireFox
  #5 (permalink)  
Antiguo 17/10/2005, 11:43
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola:

¿Como lo has usado...? yo he hecho muchas cosas con recursividad en objetos y casi siempre he logardo que funcione...

Tu objeto tendría que referenciarse con document.getElementById(objeto)...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 17/10/2005, 18:32
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 4 meses
Puntos: 4
use la tuya y la de tunait, el objeto no es un id, es un objeto. el codigo es demasiado para ponerlo aca, es una clase que hace efecto de degradado onmouseover y onfocus en elementos de formulario. estoy retocandolas, cuando termine la posteo.
entonces no hay otra forma de hacerlo? ya probe todas las opciones de setTimeout :(
__________________
Internet Explorer SuckS
Download FireFox
  #7 (permalink)  
Antiguo 18/10/2005, 01:30
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola:

Si es un objeto definido globalmente, puedes pasarlo por su nombre y referenciarlo como una cadena colgando del objeto window...

ejemplo:

function procesandoMiObjeto(objeto) {
alert(window[objeto].nombre);
//setTimeout("procesandoMiObjeto('" + objeto + "')", 5000);
}

var miObjeto = new Object();
miObjeto.nombre = "Pepe";

setTimeout("procesandoMiObjeto('miObjeto')", 1000);

El comentario lo puse para evitar un bucle infinito, después de probar que funcionaba bien...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 18/10/2005, 09:03
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 4 meses
Puntos: 4
me refiero a un nodo del documento, aca hice un ejemplo que no funciona en ningun explorador, la forma correcta es como la hice yo antes y no anda en IE.

Código:
	<script type="text/javascript">
		var cont = 0;
		function init(obj)
		{
			//alert(obj);
			cont += 5;
			obj.style.backgroundColor = "rgb(150,150," + cont + ")";
			setTimeout("init('" + obj + "')", 1000);
		}
	</script>

<body onload="init(document.getElementById('boton'))">

<input type="button" value="objeto maldito q no anda" id="boton">

</body>
__________________
Internet Explorer SuckS
Download FireFox
  #9 (permalink)  
Antiguo 18/10/2005, 12:22
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola:

Si puedes usar una cadena para referenciar un objeto, no tiene sentido que incrustes el objeto... fíjate que la recursividad se hace en base a un string, que seguramente en forma nativa se convierta a una función o a un objeto mediante un "eval"...

Una función puede recibir un objeto, que es lo que hace init de tu ejemplo, pero setTimeout lo que recibe es una cadena y debes imaginarte como quedaría esa cadena aplicándole un eval:

alert("init('" + obj + "')"); seguramente muestre esta alerta:
init('Object'), ya que Object es la cadena que devuelve cualquier objeto...
Pero también cualquier objeto lo puedes referenciar en base a una cadena:

var miBoton = document.getElementById("boton");

Luego con window["miBoton"] lo puedes referenciar (fíjate que miBoton) es una variable, pero lo que hay dentro de los corchetes es solo una cadena (no se trata de un objeto)...

Bueno, después de estas reflexiones, verás que puedes usar recursividad en base a cadenas muy fácilmente (como he dicho en otro mensaje, yo lo he hecho en muchas ocasiones)

<body onload="window['boton'] = document.getElementById('boton');init('boton')">

y la función:

function init(obj) {
cont += 5;
window[obj].style.backgroundColor = "rgb(150,150," + cont + ")";
setTimeout("init('" + obj + "')", 1000);
}

¿A que es fácil... ?

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 18:46.