Foros del Web » Programando para Internet » Jquery »

Duda/problema sobre el uso de SetInterval() dentro de plugins Jquery

Estas en el tema de Duda/problema sobre el uso de SetInterval() dentro de plugins Jquery en el foro de Jquery en Foros del Web. Hola a todos, llevo algun tiempo trasteando la forma de desarrolla plugins para Jquery (los cuales espero poder compartir pronto cuando esten lo suficientemente depurados). ...
  #1 (permalink)  
Antiguo 20/03/2012, 07:08
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 14 años, 10 meses
Puntos: 17
Pregunta Duda/problema sobre el uso de SetInterval() dentro de plugins Jquery

Hola a todos, llevo algun tiempo trasteando la forma de desarrolla plugins para Jquery (los cuales espero poder compartir pronto cuando esten lo suficientemente depurados).

La duda/problema que tengo, es crear la repeticion de procesos, algo tan simple como un setInterval que haga que una funcion se llame una y otra vez cada determinado tiempo, (algo realmente util para la elaboracion de slider, presentaciones de fotos, etc...).

Lo intente de todas formas que se me ocurrieron, y queme google antes de recurrir a ustedes, asi que como siempre, sois mi ultima carta y espero que podais ayudarme, pues debe ser algo realmente simple, que no estoy terminando de compreder su funcionamiento. No se si hay que hacer la llamada de una forma especial, o mediante el objeto de Jquery o el prototype.. o no se..($ o $.fn)

En el caso concreto que me afecta ahora mismo, en las ultimas lineas del plugin (el cual es una presentacion de fotografia bastante clasica y simple) hago una llamada asi.

Código:
showNext();
setInterval("showNext()", p);
La primera llamada, funciona correctamente (sirve para comenzar con la primera imagen), todos los controles manuales que desarrolle funcionan tambien correctamente (hace la llamada a la funcion sin problemas), pero la segunda linea que os expongo, devuelve siempre el siguiente mensaje:

Cita:
Error: showNext is not defined
He probado llamar a la funcion, con o sin los parentesis, he probado a meter la funcion dentro de una variable e invocar a la variable. Pero siempre el resultado es el mismo.

Cabe destacar que me ocurre tambien con el otro control de tiempo (SetTimeout).

Espero que me podais dar una referencia sobre el asunto para encaminarme en el camino correcto. No vi la necesidad de poner todo el codigo, ya que de cualquier otra forma que invoque a la funcion, funciona correctamente sin problemas, me ocurre sola y exclusivamente con estos dos metodos (SetInterval, SetTimeOut) por lo que interpreto que no estoy realizando de forma correcta esta accion dentro del plugin Jquery.

Estoy atento a vuestras respuesta, Un saludo a la comunidad.
  #2 (permalink)  
Antiguo 20/03/2012, 08:30
Avatar de Shirak2  
Fecha de Ingreso: abril-2008
Ubicación: Granada
Mensajes: 42
Antigüedad: 16 años
Puntos: 19
Respuesta: Duda/problema sobre el uso de SetInterval() dentro de plugins Jquery

Varias cosas:

1.- Te está ejecutando la función que le pasas desde el scope global, por lo que showNext no existe.

2.- Nunca pases un string a setTimeout o setInterval, ya que javascript hace un eval de lo que le pasas (y eval is evil https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/eval#Don't_use_eval!). Usa una función anónima.

3.- Es mejor usar setTimeout, ya que setInterval te puede dar problemas si la función es larga (https://developer.mozilla.org/en/window.setInterval#Dangerous_usage).
  #3 (permalink)  
Antiguo 20/03/2012, 09:50
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 14 años, 10 meses
Puntos: 17
De acuerdo Respuesta: Duda/problema sobre el uso de SetInterval() dentro de plugins Jquery

Ciertamente el problema estaba en pasarle el string al setInterval, por lo que se ejecutaba globalmente al pasarle eval().

Ademas, te agradezco los consejos brindados sobre usar una funcion u otra, pues eran cosas que desconocia.

He aplicado el SetTimeout, siguiendo este consejo y a quedado una cosa asi:

Código:
setTimeout(function(){showNext()}, p);
Muchas Gracias por tu tiempo Shirak2, de verdad ;)

Etiquetas: javascript, pluggin, setinterval(), settimeout()
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 03:17.