Foros del Web » Programando para Internet » Javascript »

Recursividad con parámetro this

Estas en el tema de Recursividad con parámetro this en el foro de Javascript en Foros del Web. Hola a todos, Tengo un problema al realizar una función recursiva mediante setTimeout y parámetro un parámetro "this". Mi idea es que el contenido que ...
  #1 (permalink)  
Antiguo 21/12/2010, 05:17
 
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Recursividad con parámetro this

Hola a todos,

Tengo un problema al realizar una función recursiva mediante setTimeout y parámetro un parámetro "this". Mi idea es que el contenido que está dentro de una caja de texto (input text) se desplace de izquierda a derecha. El problema aparece con la función setTimeout, el código es el siguiente:

Código HTML:
Ver original
  1. <input  type="text" onmouseover="mueveTexto(this);" onmouseout="restaurar();" value="ARNES" name="nombreF" id="nombreF" />

Código Javascript:
Ver original
  1. function mueveTexto(id){
  2.     var texto=id.value;
  3.     texto = texto.substring(1, texto.length) + texto.charAt(0);
  4.     this.value = texto;
  5.     tiempo = setTimeout("mueveTexto("+id+")",150);
  6. }
  7.  
  8. function restaurar(){
  9.     clearTimeout(tiempo);
  10.  
  11. }

El error me lo lanza en setTimeout, el siguiente error:

Syntax error at line 1 in call to setTimeout:
mueveTexto([object HTMLInputElement])
----------------^
syntax error

¿No es esto lo que se ejecuta la primera vez al poner el ratón encima? Podría hacer esto sin problemas con un par de variables globales pero prefiero "hacerlo bien".

Gracias.
  #2 (permalink)  
Antiguo 21/12/2010, 09:52
 
Fecha de Ingreso: diciembre-2010
Mensajes: 31
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Recursividad con parámetro this

Podés probar cambiando

Código Javascript:
Ver original
  1. tiempo = setTimeout("mueveTexto("+id+")",150);

por

Código Javascript:
Ver original
  1. tiempo = setTimeout(function(){mueveTexto(id);}, 150);

Te recomendaría tener una variable de control para saber que se ejecuta solo una vez la función mueveTexto, antes de volver a ejecutarse.
  #3 (permalink)  
Antiguo 22/12/2010, 02:56
 
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Recursividad con parámetro this

Muchas gracias, tu solución funciona a la perfección. Pero tengo una pequeña duda, no es, ni mucho menos, la primera vez que veo el function(){ } y no tengo claro para qué sirve. El hecho de que algo funcione sin saber por qué no me aporta todo lo que quiero, ¿sabrías explicarme qué significa esto? O sea, el function() sin ningún nombre, estando ya dentro de otra función.

Gracias!
  #4 (permalink)  
Antiguo 22/12/2010, 07:02
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Recursividad con parámetro this

Sería lo mismo que decir:

Código Javascript:
Ver original
  1. var x = function(){
  2.  
  3. };

es solo es una declaración "inline", se usa esta forma para tener más control.

No se si te respondo lo que preguntabas, si no decime, a ver si puedo ser más claro
  #5 (permalink)  
Antiguo 22/12/2010, 07:26
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Recursividad con parámetro this

si realmente te interesa, en la mcd tienes una buena explicación

Etiquetas: recursividad
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:32.