Foros del Web » Programando para Internet » Jquery »

JQuery: varias funciones consecutivas

Estas en el tema de JQuery: varias funciones consecutivas en el foro de Jquery en Foros del Web. Hola, Soy novato en Javascript y JQuery y tengo un problema que no consigo solucionar. Pido vuestra ayuda. Tengo un script JQuery en el que, ...
  #1 (permalink)  
Antiguo 03/10/2010, 10:35
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
JQuery: varias funciones consecutivas

Hola,

Soy novato en Javascript y JQuery y tengo un problema que no consigo solucionar.
Pido vuestra ayuda.

Tengo un script JQuery en el que, a la pulsación de cada tecla, quiero que se ejecuten varias funciones consecutivamente (la primera cargará con un valor un input y la segunda copiará ese valor en otro input)
Ejemplo:
Código:
$(document).ready(function() {

   function primera(){
      var valor = 23;
      $.get('carga_datos.php, {variable: valor}, function(dato1){
          $('.dato1').val(dato1);
      });

   function segunda(){
       var dato1 = $('.dato1').val();
       $('.dato2').val(dato1);
   }

   $('.accion').bind('keyup', function(){
	primera();
        segunda();
    });
...
Cuando se pulsa y se suelta una tecla sobre el input con class='accion' , en el input con class='dato1' se carga el valor correspondiente.
El problema es que primera() se ejecuta bien, pero segunda() no.
segunda() no puede recuperar el valor que hay en el input con class='dato1'
Parece como si no le diese tiempo a recuperar lo que hay en el input.

Sin embargo, juntando todo en una única función, todo va bien.

Es como si en:
Código:
 $('.accion').bind('keyup', function(){
    primera();
        segunda();
    });
segunda() intentase ejecutarse antes de haber acabado primera() de escribir en el input.

¿Es esto así?.
¿Hay solución (aparte de hacer una única función)?
Gracias anticipadas.

Un saludo
  #2 (permalink)  
Antiguo 03/10/2010, 12:35
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: JQuery: varias funciones consecutivas

recuerda que estas usando ajax, y este no sigue el flujo normal de ejecucion del codigo, lo mas probable es que intentes copiar el valor antes de que el ajax se haya completado, puedes tratar haciendo algo asi:

Código Javascript:
Ver original
  1. function primera(callback){
  2.       var valor = 23;
  3.       $.get('carga_datos.php, {variable: valor}, function(dato1){
  4.          $('.dato1').val(dato1);
  5.          callback();
  6.      });
  7.  
  8.   function segunda(){
  9.       var dato1 = $('.dato1').val();
  10.       $('.dato2').val(dato1);
  11.   }
  12.  
  13.   $('.accion').bind('keyup', function(){
  14.     primera(segunda);
  15.    });
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #3 (permalink)  
Antiguo 04/10/2010, 02:12
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Hola,

Desconocía el "callback".
Ya me estoy poniendo al día de ese tema.

Muchas gracias, Tredio, por tu ayuda.

Saludos
  #4 (permalink)  
Antiguo 04/10/2010, 15:01
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: JQuery: varias funciones consecutivas

lo que se esta haciendo es pasar como parametro otra funcion, si lo pillas?, asi se logra lo que quieres hacer, no necesariamente se tiene que llamar callback, como cualquier otro parametro el nombre es indiferente.

espero me haya sabido explicar, saludos.
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #5 (permalink)  
Antiguo 04/10/2010, 16:30
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Hola,

Creo que te has explicado muy bien.
El problema posiblemente es que aún no lo he entendido correctamente, porque no consigo que me funcione.

Mi script está en un formulario y hace lo siguiente:
Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.  
  3.     function cambio_proveedor(callback){
  4.         var id_proveedor = $('.id_proveedor option:selected').val();
  5.         // Llamamos a carga_dtos_proveedor.php
  6.         $.get('carga_dtos_proveedor.php', {id_proveedor: id_proveedor}, function(datos){
  7.             // Pinta dtos de proveedor
  8.             $('.dto_proveedor_1').val(datos.dto_1);
  9.             $('.dto_proveedor_2').val(datos.dto_2);
  10.             $('.dto_proveedor_3').val(datos.dto_3);
  11.         },'json');
  12.         callback();
  13.     }
  14.  
  15.     function coste_final(){
  16.         var tarifa_compra = $('.tarifa_compra').val();
  17.         var dto_proveedor_1 = $('.dto_proveedor_1').val();
  18.         var dto_proveedor_2 = $('.dto_proveedor_2').val();
  19.         var dto_proveedor_3 = $('.dto_proveedor_3').val();
  20.         var dto_1 = $('.dto_1').val();
  21.         var dto_2 = $('.dto_2').val();
  22.         var dto_3 = $('.dto_3').val();
  23.         var dto_ajuste = $('.dto_ajuste').val();
  24.         var punto_verde = $('.punto_verde').val();
  25.         // Obtenemos coste_final y lo pintamos
  26.         $.get('carga_coste_final.php', {tarifa_compra: tarifa_compra, dto_proveedor_1: dto_proveedor_1, dto_proveedor_2: dto_proveedor_2, dto_proveedor_3: dto_proveedor_3, dto_1: dto_1, dto_2: dto_2, dto_3: dto_3, dto_ajuste: dto_ajuste, punto_verde: punto_verde}, function(coste_final){
  27.             $('.coste_final').val(coste_final);
  28.         });
  29.     }
  30.  
  31.     // Cálculo a la carga de la página
  32.     $(window).bind('load', function(){
  33.         cambio_proveedor(coste_final);
  34.     });
  35.  
  36. });
Tengo un select donde se escoge un proveedor.
Un script en PHP (carga_dtos_proveedor.php) recupera los valores de descuentos de ese proveedor (dto_proveedor_1, dto_proveedor_2, ...)

En el apartado "Cálculo a la carga de la página" hago que se ejecuten sucesivamente las funciones cambio_proveedor() y coste_final()

La primera se ejecuta correctamente y en el formulario se ven los datos de descuentos recuperados.

Pero la segunda función, coste_final(), no consigue recuperar los datos de los campos input de los descuentos.

Por las múltiples pruebas realizadas parece que es un problema de tiempo entre la primera y segunda función.

Y no acabo de entenderlo porque creo que he puesto bien las llamadas al callback.

Si podéis echarme una mano, se agradece.

Saludos
  #6 (permalink)  
Antiguo 04/10/2010, 16:56
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: JQuery: varias funciones consecutivas

Estas seguro de que se puede pasar el nombre de una funcion como parametro?

Código Javascript:
Ver original
  1. function cambio_proveedor(callback){
  2. ...
  3.  callback();
  4.  
  5. ...
  6. }
  7.  
  8. $(window).bind('load', function(){
  9.         cambio_proveedor(coste_final);
  10.     });

A menos que tengas una muy buena razon para eso, mejor llamar a las funciones por su nombre.

Por cierto: que te dice firebug?
  #7 (permalink)  
Antiguo 04/10/2010, 17:15
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Hola,

Sí. Leí en [URL="http://www.cristalab.com/tutoriales/tutorial-de-jquery-c214l"]www.cristalab.com/tutoriales/tutorial-de-jquery-c214l[/URL] que podía hacerse:
"Nota: La funcion debe colocarse sin los parentesis y sin comillas "

El Firebug no indica error alguno del script.

Y he comprobado que si hago un retardo, mediante un alert(), al comienzo de la segunda función, todo va bien.
Por lo que todo parece indicar que hay un problema y cuando se ejecuta la segunda función aún no ha acabado la primera.

Saludos

Última edición por Iranio; 04/10/2010 a las 17:20
  #8 (permalink)  
Antiguo 04/10/2010, 17:51
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: JQuery: varias funciones consecutivas

Cita:
Iniciado por mayid Ver Mensaje
Estas seguro de que se puede pasar el nombre de una funcion como parametro?
estoy muy seguro que puede hacerce. y por otro lado no te funciona Iranio por que la estas colocando en el sitio incorrecto, seria asi


Código Javascript:
Ver original
  1. function cambio_proveedor(callback){
  2.         var id_proveedor = $('.id_proveedor option:selected').val();
  3.         // Llamamos a carga_dtos_proveedor.php
  4.         $.get('carga_dtos_proveedor.php', {id_proveedor: id_proveedor}, function(datos){
  5.             // Pinta dtos de proveedor
  6.             $('.dto_proveedor_1').val(datos.dto_1);
  7.             $('.dto_proveedor_2').val(datos.dto_2);
  8.             $('.dto_proveedor_3').val(datos.dto_3);
  9.             callback();
  10.         },'json');
  11.        
  12.     }
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #9 (permalink)  
Antiguo 05/10/2010, 01:40
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Hola,

¡¡¡¡ Bieeeennnn !!!!
Ya me funciona.
Muchas gracias Tredio.
Llevaba varios días con el tema y no conseguía resolverlo.

El error, como muy bien dices, era la colocación de callback();

Ahora tengo una duda más:
Si al acabar la función 1, se quiere ejecutar la función2 y al acabar la función 2, la función 3 ¿Cómo habría que hacer la llamada?
He probado con:
funcion_1(funcion_2(funcion_3));
Pero me da error.

¿Podrías ayudarme de nuevo con eso?
Gracias anticipadas.

Saludos
  #10 (permalink)  
Antiguo 05/10/2010, 03:50
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Hola,

Otra duda sobre el mismo tema.

Tengo 3 funciones que no precisan parámetros y quiero que al hacer click sobre un elemento del formulario se ejecuten las 3 sucesivamente.
¿Debería servir?:
Código Javascript:
Ver original
  1. $('.elemento').click(function(){
  2.     funcion_1(function(){
  3.         funcion_2(function(){
  4.             funcion_3();           
  5.         });
  6.     });
  7. });
Se me ejecutan bien las funciones 1 y 2, pero no la 3.
¿Donde está el error?
Gracias anticipadas por vuestra ayuda.

Saludos
  #11 (permalink)  
Antiguo 05/10/2010, 04:41
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: JQuery: varias funciones consecutivas

pon el codigo a ver como lo estas haciendo.
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #12 (permalink)  
Antiguo 05/10/2010, 06:11
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: JQuery: varias funciones consecutivas

En principio, las llamadas van en los callbacks. Pero si la función retornara true/false, podrías hacer:

Código Javascript:
Ver original
  1. if( foo1() )
  2.    if (foo2())
  3.       foo3;
  #13 (permalink)  
Antiguo 05/10/2010, 07:08
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Cita:
Iniciado por tredio Ver Mensaje
pon el codigo a ver como lo estas haciendo.
Hola,

Son 3 funciones independientes, cambio_proveedor(), coste_final() y tarifas() .
Son sin entrada de parámetros y sin el "callback".
La llamada es así:
Código Javascript:
Ver original
  1. $('.id_proveedor').change(function(){
  2.    cambio_proveedor(function(){
  3.       coste_final(function(){
  4.          tarifas();
  5.       });      
  6.    }); 
  7. });
Se ejecutan consecutivamente bien las dos primeras, pero no la tercera.

Gracias.

Saludos
  #14 (permalink)  
Antiguo 05/10/2010, 07:10
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Cita:
Iniciado por mayid Ver Mensaje
En principio, las llamadas van en los callbacks. Pero si la función retornara true/false, podrías hacer:

Código Javascript:
Ver original
  1. if( foo1() )
  2.    if (foo2())
  3.       foo3;
Hola,

Estoy intentando no usar lo del callback porque uso las mismas funciones, también, de forma aislada desde otras llamadas.

Gracias.

Saludos
  #15 (permalink)  
Antiguo 05/10/2010, 09:15
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: JQuery: varias funciones consecutivas

Cita:
Estoy intentando no usar lo del callback porque uso las mismas funciones, también, de forma aislada desde otras llamadas.
Eso no afectaría en nada a las demás llamadas. A menos que necesites retornar otra cosa que true / false.
  #16 (permalink)  
Antiguo 05/10/2010, 09:33
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Hola,

Como el problema se prolongaba, lo he resuelto de otra forma que, aunque menos elegante, funciona correctamente.
He hecho una función que engloba las anteriores.
De todas formas, seguiré estudiando, más adelante el tema para ver si puede mejorarse.

Muchas gracias Tredio y Mayid por vuestra ayuda.

Saludos
  #17 (permalink)  
Antiguo 05/10/2010, 10:24
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: JQuery: varias funciones consecutivas

hola que tal, si quieres pones el codigo de las tres funciones, a eso me referia, para ver de que forma se podria colocar. saludos.
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #18 (permalink)  
Antiguo 05/10/2010, 10:32
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: JQuery: varias funciones consecutivas

Bueno, si es por seguir investigando nomás... esto me llegó hoy en un boletin. Se trata de efectos encadenados:

http://www.desarrolloweb.com/articul...os-jquery.html
http://www.desarrolloweb.com/articul...a-efectos.html

El segundo link en particular trata sobre el queue en jQuery. No se como funciona, pero sirve para encadenar...
  #19 (permalink)  
Antiguo 05/10/2010, 10:37
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Cita:
Iniciado por mayid Ver Mensaje
Bueno, si es por seguir investigando nomás... esto me llegó hoy en un boletin. Se trata de efectos encadenados:

[url]http://www.desarrolloweb.com/articulos/colas-efectos-jquery.html[/url]
[url]http://www.desarrolloweb.com/articulos/metodo-queue-acceder-cola-efectos.html[/url]

El segundo link en particular trata sobre el queue en jQuery. No se como funciona, pero sirve para encadenar...
Hola,

Muchas gracias, Mayid, pero ya había leído esos dos artículos.
Pero no me había aclarado (mis conocimientos de Javascript son muy escasos)

Saludos
  #20 (permalink)  
Antiguo 05/10/2010, 11:16
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Cita:
Iniciado por tredio Ver Mensaje
hola que tal, si quieres pones el codigo de las tres funciones, a eso me referia, para ver de que forma se podria colocar. saludos.
Hola,

Muchas gracias Tredio por tu oferta.
Las funciones son:
Código Javascript:
Ver original
  1. function cambio_proveedor(){
  2.         var id_proveedor = $('.id_proveedor option:selected').val();
  3.         // Llamamos a carga_dtos_proveedor.php
  4.         $.get('carga_dtos_proveedor.php', {id_proveedor: id_proveedor}, function(datos){
  5.             // Pinta dtos de proveedor
  6.             $('.dto_proveedor_1').val(datos.dto_1);
  7.             $('.dto_proveedor_2').val(datos.dto_2);
  8.             $('.dto_proveedor_3').val(datos.dto_3);
  9.         },'json');
  10.     }
  11.  
  12.     function coste_final(){
  13.         var tarifa_compra = $('.tarifa_compra').val();
  14.         var dto_1 = $('.dto_1').val();
  15.         var dto_2 = $('.dto_2').val();
  16.         var dto_3 = $('.dto_3').val();
  17.         var dto_ajuste = $('.dto_ajuste').val();
  18.         var punto_verde = $('.punto_verde').val();
  19.         // Obtenemos coste_final y lo pintamos
  20.         $.get('carga_coste_final.php', {tarifa_compra: tarifa_compra, dto_proveedor_1: datos.dto_1, dto_proveedor_2: datos.dto_2, dto_proveedor_3: datos.dto_3, dto_1: dto_1, dto_2: dto_2, dto_3: dto_3, dto_ajuste: dto_ajuste, punto_verde: punto_verde}, function(coste_final){
  21.             $('.coste_final').val(coste_final);
  22.                 });
  23.     }
  24.  
  25.     function tarifas(){
  26.         var coste_final = $('.coste_final').val();
  27.         var margen_1 = $('.margen_1').val();
  28.         var margen_2 = $('.margen_2').val();
  29.         // Obtenemos tarifa_1 y la pintamos
  30.         $.get('carga_tarifa.php', {coste_final: coste_final, margen: margen_1}, function(tarifa_1){
  31.             $('.tarifa_1').val(tarifa_1);
  32.         });
  33.         // Obtenemos tarifa_2 y la pintamos
  34.         $.get('carga_tarifa.php', {coste_final: coste_final, margen: margen_2}, function(tarifa_2){
  35.             $('.tarifa_2').val(tarifa_2);
  36.         });
  37.     }
El tema es poder llamar independientemente a 1, 2 ó 3 funciones encadenadas de forma que cuando se ejecute una ya haya acabado la anterior.

Saludos
  #21 (permalink)  
Antiguo 05/10/2010, 11:36
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: JQuery: varias funciones consecutivas

hola. prueba con algo asi y me cuentas.

Código Javascript:
Ver original
  1. function cambio_proveedor(callback){
  2.         var id_proveedor = $('.id_proveedor option:selected').val();
  3.         // Llamamos a carga_dtos_proveedor.php
  4.         $.get('carga_dtos_proveedor.php', {id_proveedor: id_proveedor}, function(datos){
  5.             // Pinta dtos de proveedor
  6.             $('.dto_proveedor_1').val(datos.dto_1);
  7.             $('.dto_proveedor_2').val(datos.dto_2);
  8.             $('.dto_proveedor_3').val(datos.dto_3);
  9.             callback();
  10.         },'json');
  11.     }
  12.  
  13.     function coste_final(callback){
  14.         var tarifa_compra = $('.tarifa_compra').val();
  15.         var dto_1 = $('.dto_1').val();
  16.         var dto_2 = $('.dto_2').val();
  17.         var dto_3 = $('.dto_3').val();
  18.         var dto_ajuste = $('.dto_ajuste').val();
  19.         var punto_verde = $('.punto_verde').val();
  20.         // Obtenemos coste_final y lo pintamos
  21.         $.get('carga_coste_final.php', {tarifa_compra: tarifa_compra, dto_proveedor_1: datos.dto_1, dto_proveedor_2: datos.dto_2, dto_proveedor_3: datos.dto_3, dto_1: dto_1, dto_2: dto_2, dto_3: dto_3, dto_ajuste: dto_ajuste, punto_verde: punto_verde}, function(coste_final){
  22.             $('.coste_final').val(coste_final);
  23.             callback();
  24.                 });
  25.     }
  26.  
  27.     function tarifas(){
  28.         var coste_final = $('.coste_final').val();
  29.         var margen_1 = $('.margen_1').val();
  30.         var margen_2 = $('.margen_2').val();
  31.         // Obtenemos tarifa_1 y la pintamos
  32.         $.get('carga_tarifa.php', {coste_final: coste_final, margen: margen_1}, function(tarifa_1){
  33.             $('.tarifa_1').val(tarifa_1);
  34.         });
  35.         // Obtenemos tarifa_2 y la pintamos
  36.         $.get('carga_tarifa.php', {coste_final: coste_final, margen: margen_2}, function(tarifa_2){
  37.             $('.tarifa_2').val(tarifa_2);
  38.         });
  39.     }

las anidarias de esta manera:


Código Javascript:
Ver original
  1. cambio_proveedor(function(){
  2.     coste_final(tarifas);
  3. });

como te dije, prueba y me cuentas, no estoy seguro de si es asi.
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #22 (permalink)  
Antiguo 05/10/2010, 11:45
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Cita:
Iniciado por tredio Ver Mensaje
hola. prueba con algo asi y me cuentas.
...
las anidarias de esta manera:

Código Javascript:
Ver original
  1. cambio_proveedor(function(){
  2.     coste_final(tarifas);
  3. });

como te dije, prueba y me cuentas, no estoy seguro de si es asi.
Hola,

Tengo algunas dudas:
Si en lugar de 3 funciones, son 5, 7, ... ¿cómo haría para llamarlas de forma encadenada?
¿Puedo llamar a una de esas funciones, independientemente, sin enviar ningún parámetro, a pesar de que esperen el parámetro callback?
Gracias.

Saludos
  #23 (permalink)  
Antiguo 05/10/2010, 11:58
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: JQuery: varias funciones consecutivas

seria muy parecido, pero no me dijiste si te sirvio de esa manera jeje, si son mas de 3 seria algo asi.

Código Javascript:
Ver original
  1. funcion_1(function(){
  2.     funcion_2(function(){
  3.         funcion_3(funcion_4);
  4.     });
  5. });

siguiendo esa estructura, otra cosa que no entiendo es para que lo haces asi, si ya sabes cual es el nombre de las funciones que vas a usar y siempre lo haces con la misma, por que no haces algo asi:

Código Javascript:
Ver original
  1. function cambio_proveedor(){
  2.         var id_proveedor = $('.id_proveedor option:selected').val();
  3.         // Llamamos a carga_dtos_proveedor.php
  4.         $.get('carga_dtos_proveedor.php', {id_proveedor: id_proveedor}, function(datos){
  5.             // Pinta dtos de proveedor
  6.             $('.dto_proveedor_1').val(datos.dto_1);
  7.             $('.dto_proveedor_2').val(datos.dto_2);
  8.             $('.dto_proveedor_3').val(datos.dto_3);
  9.             coste_final();
  10.         },'json');
  11.     }
  12.  
  13.     function coste_final(){
  14.         var tarifa_compra = $('.tarifa_compra').val();
  15.         var dto_1 = $('.dto_1').val();
  16.         var dto_2 = $('.dto_2').val();
  17.         var dto_3 = $('.dto_3').val();
  18.         var dto_ajuste = $('.dto_ajuste').val();
  19.         var punto_verde = $('.punto_verde').val();
  20.         // Obtenemos coste_final y lo pintamos
  21.         $.get('carga_coste_final.php', {tarifa_compra: tarifa_compra, dto_proveedor_1: datos.dto_1, dto_proveedor_2: datos.dto_2, dto_proveedor_3: datos.dto_3, dto_1: dto_1, dto_2: dto_2, dto_3: dto_3, dto_ajuste: dto_ajuste, punto_verde: punto_verde}, function(coste_final){
  22.             $('.coste_final').val(coste_final);
  23.             tarifas();
  24.                 });
  25.     }
  26.  
  27.     function tarifas(){
  28.         var coste_final = $('.coste_final').val();
  29.         var margen_1 = $('.margen_1').val();
  30.         var margen_2 = $('.margen_2').val();
  31.         // Obtenemos tarifa_1 y la pintamos
  32.         $.get('carga_tarifa.php', {coste_final: coste_final, margen: margen_1}, function(tarifa_1){
  33.             $('.tarifa_1').val(tarifa_1);
  34.         });
  35.         // Obtenemos tarifa_2 y la pintamos
  36.         $.get('carga_tarifa.php', {coste_final: coste_final, margen: margen_2}, function(tarifa_2){
  37.             $('.tarifa_2').val(tarifa_2);
  38.         });
  39.     }

Cita:
¿Puedo llamar a una de esas funciones, independientemente, sin enviar ningún parámetro, a pesar de que esperen el parámetro callback?
si se puede pero de la forma en que esta ahorita daria error para que no suceda eso tendrias que validar que la funcion existe, es decir que el valor del callback sea diferente de null, podria ser algo asi:

Código Javascript:
Ver original
  1. if(callback){callback();}

claro asi no asegurariamos que el parametro sea una funcion, para eso creo que puedes usar el tipeof investiga algo sobre eso.

saludos.
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #24 (permalink)  
Antiguo 05/10/2010, 13:43
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Cita:
Iniciado por tredio Ver Mensaje
...siguiendo esa estructura, otra cosa que no entiendo es para que lo haces asi, si ya sabes cual es el nombre de las funciones que vas a usar y siempre lo haces con la misma, por que no haces algo asi:...
Hola,

No puedo hacer que desde dentro de una de las funciones se llame a otra porque hay otros eventos que deben disparar sólo una de esas funciones.

Tengo que estudiar más sobre Javascript y JQuery
(Hasta ahora sólo he manejado PHP)
A ver si cuando acabe el desarrollo actual para mi cliente puedo dedicar un tiempo a ello.

Da gusto encontrar a personas dispuestas a ayudar.
Muchas gracias por todo.

Saludos
  #25 (permalink)  
Antiguo 05/10/2010, 13:56
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: JQuery: varias funciones consecutivas

tranquilo amigo espero te vaya bien. saludos.
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #26 (permalink)  
Antiguo 05/10/2010, 14:24
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: JQuery: varias funciones consecutivas

Cita:
No puedo hacer que desde dentro de una de las funciones se llame a otra porque hay otros eventos que deben disparar sólo una de esas funciones.
Mira, podes usar las mismas funciones para diferentes cosas, y ponerles condicionales:
Código Javascript:
Ver original
  1. function muestra(evaluador){
  2.  
  3. tatata..tatata...
  4. if(evaluador) segunda_funcion();
  5. }

Ahora las llamadas:

Código Javascript:
Ver original
  1. muestra(true); // esta va a encadenar
  2.  
  3. ..
  4.  
  5. muestra(false);// esta no va a encadenar

Volviendo a mi propuesta, de encadenar una tras otras las llamadas a la función y retornar true/false: el perfectamente viable, pero si no te convence entonces bueno, será en un futuro.
  #27 (permalink)  
Antiguo 05/10/2010, 15:26
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: JQuery: varias funciones consecutivas

Cita:
Iniciado por mayid Ver Mensaje
Mira, podes usar las mismas funciones para diferentes cosas, y ponerles condicionales:
Código Javascript:
Ver original
  1. function muestra(evaluador){
  2.  
  3. tatata..tatata...
  4. if(evaluador) segunda_funcion();
  5. }

Ahora las llamadas:

Código Javascript:
Ver original
  1. muestra(true); // esta va a encadenar
  2.  
  3. ..
  4.  
  5. muestra(false);// esta no va a encadenar

Volviendo a mi propuesta, de encadenar una tras otras las llamadas a la función y retornar true/false: el perfectamente viable, pero si no te convence entonces bueno, será en un futuro.
Hola,

Ya veo: es pasarle como parámetro si debe ejecutar o no la siguiente función.
Es una solución muy sencilla pero elegante.
Muchas gracias Mayid.

Saludos

Etiquetas: funciones
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 17:23.