Foros del Web » Programando para Internet » Javascript »

Ejecutar funcion javascript solo una vez

Estas en el tema de Ejecutar funcion javascript solo una vez en el foro de Javascript en Foros del Web. Hola podrian ayudar a un novatillo como yo. Es algo sencillo, he llegado hasta la mitad del camino pero no me sale la guinda. Veran, ...
  #1 (permalink)  
Antiguo 22/09/2013, 15:14
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Ejecutar funcion javascript solo una vez

Hola podrian ayudar a un novatillo como yo. Es algo sencillo, he llegado hasta la mitad del camino pero no me sale la guinda.

Veran, este codigo se me ejecuta cada segundo pero indefinidamente y no se como hacer para que solo se me ejecute una sola vez.

Miren el codigo es el siguiente:

Código Javascript:
Ver original
  1. <script>
  2.    
  3.  
  4.    
  5.         (function($){
  6.             $(window).load(function(){
  7.                 /* custom scrollbar fn call */
  8.                
  9.                
  10.         var refresh = setInterval(
  11.             function()
  12.             {
  13.                
  14.                
  15.                 $(".contenido_somos").mCustomScrollbar({
  16.                     scrollButtons:{
  17.                         enable:true
  18.                     }
  19.                 });
  20.  
  21.  
  22.             }, 1000); // 1 segundo
  23.            
  24.  
  25.  
  26.             });
  27.         })(jQuery);

Gracias de antemano.
  #2 (permalink)  
Antiguo 22/09/2013, 17:43
Avatar de danny_  
Fecha de Ingreso: septiembre-2012
Mensajes: 95
Antigüedad: 11 años, 6 meses
Puntos: 4
Respuesta: Ejecutar funcion javascript solo una vez

Has de usar un setTimeout y no un setInterval.
__________________
http://www.danielcarvajal.es
  #3 (permalink)  
Antiguo 23/09/2013, 09:04
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

Gracias por la ayuda.

Pero... si en este codigo donde utilizo setInterval, quisiera hacer un digamos stop en la ejecucion , una vez ejecutado la funcion ya sea una vez o dos veces por poner un ejemplo.

¿Que tendría que implementarle, que le faltaria por poner?
  #4 (permalink)  
Antiguo 23/09/2013, 11:23
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 6 meses
Puntos: 578
Respuesta: Ejecutar funcion javascript solo una vez

Cuando quieres que se detenga??
Lo puedes hacer con clearInterval()
Saludos
  #5 (permalink)  
Antiguo 23/09/2013, 12:24
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

Pues veras PHperos, desde que he puesto el post con el codigo estoy investigando , y si segun he leido es con clearInterval.

Pero por mas intentos que hago no me funciona.

Mi idea es que ejecute el codigo solo una vez y se pare.

Eso es lo que necesito.

Si, quizas puedas decir , que para eso podria utilizar setTimeout, pero no me funciona ( extraño, lo se).

Ya estoy sicologicamente roto, con esto que me trae de cabeza.

Solo necesito que ( con setInterval) , se ejecute ,solo una vez y se pare.

Gracias de antemano
  #6 (permalink)  
Antiguo 23/09/2013, 12:47
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 6 meses
Puntos: 578
Respuesta: Ejecutar funcion javascript solo una vez

Set interval lo ejecuta infinitas veces hasta que lo detengas... Puedes hacer un bucle while
  #7 (permalink)  
Antiguo 23/09/2013, 12:50
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

Phperos , pero eso lo se hacer en php , pero no en javascript, sin saber he hecho lo que ves. Ya no se como hacer eso que pides.

Aunque lo entiendo.

SI pudieras hecharme una ayudita seria genial please.
  #8 (permalink)  
Antiguo 23/09/2013, 13:02
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 6 meses
Puntos: 578
Respuesta: Ejecutar funcion javascript solo una vez

Osea que si el scroll no está habilitado se habilite y se detenga?
  #9 (permalink)  
Antiguo 23/09/2013, 13:03
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: Ejecutar funcion javascript solo una vez

Cita:
Si, quizas puedas decir , que para eso podria utilizar setTimeout, pero no me funciona ( extraño, lo se).
Y por qué no mejor indicas por qué no te funciona el setTimeout() en vez de complicar más el tema con el setInterval
  #10 (permalink)  
Antiguo 23/09/2013, 13:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

Explico, en mi web tengo mucho javascript haciendo otras funciones.

No se javascript, pero lo que tengo puesto esta depurado ya que he intentado leerme tutoriales etc.



Tengo un menu, en la que cada opcion de menu aparece mediante un fade in y fade out y desaparece de igual manera.

Esto lo hace un javascript.


En cada opcion de menu que aparece mediante fade tiene un div con su contenido que se puede ver mediante un scrollbar

el cual quiero darle estilo con este codigo que ya he puesto en el primer post.



Pero el codigo solo funciona si lo pongo en una sola opcion, un solo div ¿?


Cuando lo pongo en dos div, osea dos opciones de menu , deja de funcionar.



Descubri que forzando el codigo a ejecutarse (usando setInterval y no setTimeout) despues de hacer infinidad de pruebas, en mi ignorancia de no saber,


descubri que mediante setInterval ,SI , funcionaba. Pero señores se repetia hasta la saciedad y en cada div me

aparecen 1 ,2,3,4,5,6,7,8, scrollbar cada dos segundos asi hasta el infinito.

Y claro solo quiero que se pare cuando me aparezca el primer scrollbar y ya esta .

Si lo se es una odisea pero llevo ya 10 dias!!!! sicologicamente estoy k.o help!!!!!
  #11 (permalink)  
Antiguo 23/09/2013, 13:33
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: Ejecutar funcion javascript solo una vez

Si no pudieras aplicar el estilo por css desde el principio,

Creo que te convendría mejor hacer la llamada a dicho cambio al momento de llamar la opción del menú, es decir modificar el script del menú para que aparte de mostrar el div aplique el estilo.
  #12 (permalink)  
Antiguo 23/09/2013, 13:38
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

INtentare a hacer eso que me aconsejas "opc001" ( colaborador). Pero , si no lo consiguiera o no pudiera ser.

Podrias ayudarme a decirme como parar el codigo que he puesto para que solo se ejecute una vez ?

Si no es mucho pedir. please
  #13 (permalink)  
Antiguo 23/09/2013, 13:42
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: Ejecutar funcion javascript solo una vez

El problema de parar la ejecución del timeout, es primero decidir en qué momento vas a hacer la detención, luego, cómo volver a ejecutarlo. Además, de que necesitas tener una variable donde almacenar el id del proceso a ejecutar, por lo que en realidad te aconsejo buscar otra alternativa.
  #14 (permalink)  
Antiguo 23/09/2013, 13:47
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

Pues me aferro a lo que me has aconsejado sobre intentar ejecutar en cada opcion del menu el scrollbar. Y me aferro a eso como si no hubiera un mañana por que si no lo hago me voy a sentir con el culo al aire por que no se que alternativa hacer mas ya que no se javascript . Gracias igualmente por los consejos. Y si me sale lo dire aqui
  #15 (permalink)  
Antiguo 23/09/2013, 15:31
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

Una ultima cosa donde podria poner en este codigo un "delay" de 5000 (5 segundos)


eso podria ser la solucion al problema.


Código Javascript:
Ver original
  1. var refresh = setInterval(
  2.                                         function()
  3.                                         {
  4.        
  5.                                 $(".contenedor_opcs").mCustomScrollbar({
  6.                                     scrollButtons:{
  7.                                         enable:true
  8.                                     }
  9.                                 });
  10.        
  11.                         }, 2000);
  #16 (permalink)  
Antiguo 23/09/2013, 16:27
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: Ejecutar funcion javascript solo una vez

Supongo que antes de la linea

$(".contenedor_opcs").mCustomScrollbar({
  #17 (permalink)  
Antiguo 23/09/2013, 16:53
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 1 mes
Puntos: 53
Respuesta: Ejecutar funcion javascript solo una vez

deberias colocar el codigo completo de tu pagina para una mejor idea, no le veo la necesidad de hacer lo que quieres con steinterval y quizas ni siquiera settimeout
__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #18 (permalink)  
Antiguo 24/09/2013, 15:17
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

Ok, codigo que estoy utilizando es este:

Para que me apacezcan las opciones de menu:

Código Javascript:
Ver original
  1. // inicialmente aparece la primera opcion marcada
  2.         var ultimo=1;
  3.         $(document).ready(function(){
  4.             // evento que se ejecutara al seleccionar cualquier opcion del menu
  5.             $(".dock-container2 div").click(function(){
  6.                 // obtenemos el nuevo id
  7.                 nuevo=$(this).attr("id");
  8.                 if(nuevo!=ultimo)
  9.                 {
  10.                     // escondemos el ultimo id
  11.                     $("#opc_"+ultimo).fadeOut(function(){
  12.                         $("#"+ultimo).removeClass("seleccionado");
  13.                         $("#"+nuevo).addClass("seleccionado");
  14.                         // mostramos el nuevo id
  15.                         $("#opc_"+nuevo).fadeIn();
  16.                         ultimo=nuevo;
  17.                     });
  18.                 }
  19.             });
  20.         });



Y el siguiente codigo es el que utilizo para personalizar el scrollbar de dichos divs del menu de opciones:

Código Javascript:
Ver original
  1. (function($){
  2.             $(window).load(function(){
  3.  
  4.                 $(".contenedor_opcs").mCustomScrollbar({
  5.                     scrollButtons:{
  6.                         enable:true
  7.                     }
  8.                 });
  9.  
  10.             });
  11.         })(jQuery);



Me sugeristeis implementar el primer codigo que he puesto en este post, con el segundo codigo para ,asi, en un solo click hacer que mediante un fade aparezca el div de la opcion de menu + el scrollbar. Y lo he intentado pero como estoy pegado en javascript pues no me sale.

y la otra opcion de solucion que se me ocurria era poner en el segundo codigo de este post un stop para que no se repitiera cada x segundos al ponerle un setInterval, pero no se como se le coloca.

Y no, no me va con el setTimeout ( y no se porque por que hubiera sido genial ya que se ejecuta solo una vez) pero setTImeout no va .

De alguna manera es forzar a que el codigo de personalizacion del scrollbar se ejecute para cada div (opcion de menu)

Ya que el problema que pasa es que solo consigo que aparezca en opcion de menu "A" y en la opcion de menu "b" no aparece.

y vicecersa, si pongo el srollbar en b entonces no me aparece en "A".


Hasta que descubri que con setInterval funciona pero claro , me aparecen 1,2,3,4,5,6,7,8 scrollbar asi hasta el infinito por que no se para nunca por eso necesito pararlo cuando se ejecute una vez.

Y repito setTimeout no va, lo he reprobado mil veces.



Si pudierais ayudarme os estaria eternamente agradecido.

Última edición por mensajeescrito; 24/09/2013 a las 15:23
  #19 (permalink)  
Antiguo 24/09/2013, 16:54
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: Ejecutar funcion javascript solo una vez

Si colocas el
Código Javascript:
Ver original
  1. $(".contenedor_opcs").mCustomScrollbar({
  2.                     scrollButtons:{
  3.                         enable:true
  4.                     }
  5.                 });

después de

Código Javascript:
Ver original
  1. $("#opc_"+nuevo).fadeIn();

¿No funciona?
  #20 (permalink)  
Antiguo 25/09/2013, 05:24
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

No, "ocp001a", no funciona como me dices.

Se resiste.

Como digo quizas un stop en el set Interval o un delay en el setInterval seria la solucion casi seguro. ( aunque no la mas elegante ) se que funcionaria pero hasta aqui mi conocimientos de javascript , lo que veis que he puesto de codigo. Por eso necesito vuestra ayuda.

help!!!!
  #21 (permalink)  
Antiguo 25/09/2013, 06:12
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Ejecutar funcion javascript solo una vez

De hecho he implementado lo del stop en el codigo de esta manera pero no me funciona , ¿alguien sabe donde esta el error?

Código Javascript:
Ver original
  1. (function($){
  2.             $(window).load(function(){
  3.  
  4.                         var refresh = setInterval(
  5.                                         function()
  6.                                         {
  7.        
  8.                                 $(".contenedor_opcs").mCustomScrollbar({
  9.                                     scrollButtons:{
  10.                                         enable:true
  11.                                     }
  12.                                 });
  13.        
  14.                         }, 2000);
  15.                         });
  16.                        
  17.                                 $(".contenedor_opcs").mCustomScrollbar(function(){
  18.                                     clearInterval(refresh);
  19.                                    
  20.                                 });                    
  21.  
  22.         })(jQuery);

Etiquetas: funcion, jquery, vez
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 14:08.