Foros del Web » Programando para Internet » Javascript »

saber cuando se termina de ejecutar una funcion

Estas en el tema de saber cuando se termina de ejecutar una funcion en el foro de Javascript en Foros del Web. Hola a todos que tal tengo un codigo que tiene dos inputs <input type="text" id="text1" onblur="funcion1();"> <input type="text" id="text2" onblur="funcion2();"> cuando se carga la pagina ...
  #1 (permalink)  
Antiguo 17/02/2012, 10:25
Avatar de enunez810  
Fecha de Ingreso: junio-2003
Ubicación: Caracas, Venezuela
Mensajes: 98
Antigüedad: 20 años, 10 meses
Puntos: 0
saber cuando se termina de ejecutar una funcion

Hola a todos que tal

tengo un codigo que tiene dos inputs

<input type="text" id="text1" onblur="funcion1();">

<input type="text" id="text2" onblur="funcion2();">

cuando se carga la pagina yo mando a ejecutar el siguiente codigo

<script language="javascript">
document.getElementById("text1").onblur();
document.getElementById("text2").onblur();
</script>

El problema es que necesito que el onblur del text2 se ejecute SOLO cuando se termine de ejecutar el ONBLUR del text1

hay alguna manera de saber cuando se termina de ejecutar elonblur o la funcion del onblur o algo asi ?

tambien podria usar Jquery si alguien teiene la respuesta pero en Jquery
  #2 (permalink)  
Antiguo 17/02/2012, 11:43
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: saber cuando se termina de ejecutar una funcion

buenas,
normalmente no hace falta determinar cuando una funcion termina su ejecucción, al menos en el caso de que se trate de dos ejecucciones contigüas. es decir, dos invocaciones que se encuentran en el mismo nivel del scope y una seguida de la otra. tal como tu ejemplo donde invocas ambos onblur. en ese contexto, no hace falta determinar cuando finaliza porque el intérprete es síncrono. es decir, que se lee línea a línea en un orden dado por el control de flujo. de modo que cuando termina la invocación del primero se inicia el segundo.

en el único caso en que el interprese se comporta de forma asíncrona son en aquellos procesos que se activan bajo ciertas circunstancias: generalmente eventos y los timers — este último no estoy seguro si se pueda considerar asíncrono. el caso de los eventos, no pueden ser explícitamente invocado por código. por ejemplo en tu caso, invocar onblur() no es lo mismo que iniciar ese evento.

en fin, si necesitaras determinar cuando finaliza una función, una implementación simple podría ser crear una variable booleana que se inicia a false justo al principio de la función, y en la última línea de la función lo cambias a true. luego en la segunda comprueba el estado de esa variable. tengase en cuenta que no es una solución 100% efectiva; la implementación asume que la función se ejecuta línea a línea sin control de flujo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 17/02/2012, 12:01
Avatar de enunez810  
Fecha de Ingreso: junio-2003
Ubicación: Caracas, Venezuela
Mensajes: 98
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: saber cuando se termina de ejecutar una funcion

Hola Gracias por responder zerokilled el problema es que cuando ejecuto el

document.getElementById("text1").onblur(); este llema a una funcion que busca con un ajax en
la base de datos y carga unos parametros el rollo es que la segunda funcion o sea el
document.getElementById("text2").onblur(); se alimenta de uno de esos parametros y com la primera funcion tarda buscando los datos en la BD y eso se ejecuta la segunda funcion sin haber terminado la primera

es por eso que necesito saber cuando se termina de ejecutar la primera funcion para poder ejecutar la segunda funcion
  #4 (permalink)  
Antiguo 17/02/2012, 12:13
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: saber cuando se termina de ejecutar una funcion

en ese caso, puedes hacer que la petición ajax sea síncrona... pero, tengase en cuenta que eso congelará cualquier proceso javascript hasta que el servidor le responda. la ventaja es que javascript espera por la respuesta de modo que los próximos proceso pueden utilizar los datos; la desventaja es que no sabes cuanto tiempo puede demorar la petición, de modo que parecerá como si algo no andará bien.

si no lo quieres hacer síncrono, se me ocurre que al invocar la segunda función, determine la validéz de los parámetros que debe utilizar. por ejemplo, si no hay parámetros significa que aún no se ha procesado la primera función. entonces, si no hay parámetros válidos, utiliza un temporizador para invocar nuevamente la segunda función luego de cierto intérvalo. fíjate bien el flujo:
  1. si hay parametros, procesa de forma normal
  2. si no hay parametros, crear un temporizador invocando la misma funcion (por ejemplo de un 1 segundo) y saltar el resto del proceso normal.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 31/03/2015, 15:50
 
Fecha de Ingreso: marzo-2015
Mensajes: 1
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: saber cuando se termina de ejecutar una funcion

buenas, soy nuevo pero intentare responder a tu pregunta,

ok...

para solucionar tu problema:
1.- debes invocar "funcion2()" al final de "funcion1()".
2.- al cargar la pagina solo debes invocar el primer "onblur", el segundo no hace falta ya que la "funcion2()" ahora se ejecutara automaticamente al terminar "funcion1()".
3.- listo, ya esta!... solucionado tu problema ;)).

recomendación: al cargar la pagina no tienes porque invocar el onblur del 2do. input, con invocar la "funcion2()" directamente tienes.

Etiquetas: funcion, input
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 03:22.