Foros del Web » Programando para Internet » Javascript »

Llamar a una función desde otra [SOLUCIONADO].

Estas en el tema de Llamar a una función desde otra [SOLUCIONADO]. en el foro de Javascript en Foros del Web. Holas a todos: Tengo un array del tipo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código javascript : Ver original funciones = [         funcion1 : function ...
  #1 (permalink)  
Antiguo 04/06/2009, 08:01
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 19 años, 1 mes
Puntos: 0
Llamar a una función desde otra [SOLUCIONADO].

Holas a todos:

Tengo un array del tipo

Código javascript:
Ver original
  1. funciones=[
  2.         funcion1 : function(){
  3.               //blah,blah
  4.         },
  5.         funcion2 : function(){
  6.              //blah,blah
  7.         }
  8. ]

y quiero usar las funciones que están dentro de la siguiente manera

Código javascript:
Ver original
  1. LlamaFunciones = function(funciones){
  2.       for(key in funciones){
  3. //Aquí es mi problema, no se como llamar a las funciones que están dentro, ya he probado con:
  4.       funciones[key];
  5.            call(funciones[key]);
  6.            eval(funciones[key]); //este al menos puedo ponerle un string con el código de la función, pero yo quiero no ponerle el código entrecomillado.
  7.       }
  8. }
__________________
Mi blog

Última edición por Galled; 04/06/2009 a las 11:55 Razón: SOLUCIONADO.
  #2 (permalink)  
Antiguo 04/06/2009, 08:17
 
Fecha de Ingreso: abril-2009
Mensajes: 104
Antigüedad: 15 años
Puntos: 0
Respuesta: Llamar a una función desde otra.

hola, he intentado ayudarte y la verdad es que no entiendo lo que quieres, si pudes poner todo el codigo?
  #3 (permalink)  
Antiguo 04/06/2009, 08:26
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Llamar a una función desde otra.

Cita:
Iniciado por angelosss Ver Mensaje
hola, he intentado ayudarte y la verdad es que no entiendo lo que quieres, si pudes poner todo el codigo?
Ok

Es un poco grande y lo pongo aquí de manera genérica porque estoy usando jQuery en el mismo código (y este no es su foro):

Código javascript:
Ver original
  1. <script>
  2.  
  3. CargandoMsg = function(id){
  4.     if(jQuery(id).get(0)){
  5.         var tag = jQuery(id).get(0).tagName;
  6.         switch(tag){
  7.         case "SELECT":
  8.             jQuery(id).attr("disabled","true");
  9.             jQuery(id).html('<option value="cargando">Cargando...</option>');      
  10.         break;
  11.         case "DIV":
  12.             jQuery(id).html('');
  13.             jQuery(id).addClass("cargando");
  14.         break;
  15.         case "INPUT":
  16.             jQuery(id).attr("value","cargando...");
  17.             jQuery(id).attr("disabled","true");
  18.         break;
  19.         }
  20.         return tag
  21.     }
  22. }
  23.  
  24. CargandoFail = function(parametros){
  25. var tag = jQuery(parametros["hijo"]).get(0);
  26.     if(tag && parametros["propaga"]){
  27.         var tag = tag.tagName;
  28.         switch(tag){
  29.         case "SELECT":
  30.             jQuery(parametros["hijo"]).html('<option value="cargando">Sin valores</option>');
  31.             jQuery(parametros["hijo"]).change();
  32.         break;
  33.         case "DIV":
  34.             if(!parametros['no_fail_msg']){
  35.                 jQuery(parametros["hijo"]).html('No se han encontrado valores.');
  36.             }
  37.             jQuery(parametros["hijo"]).removeClass("cargando");
  38.         break;
  39.         case "INPUT":
  40.             jQuery(parametros["hijo"]).attr("value","--");
  41.             jQuery(parametros["hijo"]).attr("disabled","true");
  42.         break;
  43.         }
  44.     }
  45. }
  46.  
  47. CargaSelect = function(parametros){
  48. var div = parametros["hijo"]+"_"; //select es el hijo.
  49. var tag;
  50. var verifica = false;
  51.  
  52.     if(!parametros["tipo"]){
  53.         parametros["tipo"] = "POST";
  54.     }
  55.     if(parametros["verifica"]){
  56.         verifica = parametros["verifica"];
  57.     }
  58.  
  59.     if((parametros["data"]) && !(/cargando$/.test(parametros["data"]))){
  60.         tag = CargandoMsg(parametros["hijo"]);
  61.         jQuery.ajax({
  62.             type: parametros["tipo"],
  63.             url: parametros["file"],
  64.             data: parametros["data"]+parametros["bonus"],
  65.             success: function(div){
  66.                     switch(tag){
  67.                     case "INPUT":
  68.                         jQuery(parametros["hijo"]).val(div);
  69.                     break;
  70.                     default:
  71.                         if(div!=jQuery(parametros["hijo"]).html()){
  72.                             jQuery(parametros["hijo"]).html(div);
  73.                         }
  74.                     break;
  75.                     }
  76.                     jQuery(parametros["hijo"]).removeAttr("disabled");
  77.                     jQuery(parametros["hijo"]).removeClass("cargando");
  78.                     if(parametros["propaga"]){
  79.                         jQuery(parametros["hijo"]).change();
  80.                     }  
  81. /////////////////////////////////////////////////////////////////////////////////////////////////
  82. /////////////////////////////////////////////////////////////////////////////////////////////////
  83.                     eval(parametros['al_final']);//Aquí es donde tengo el problema
  84. /////////////////////////////////////////////////////////////////////////////////////////////////
  85.                 }
  86.             });
  87.     }else if((!parametros["data"]) || (/cargando$/.test(parametros["data"]))){
  88.         CargandoFail(parametros);
  89.     }
  90. };
  91.  
  92. getVals = function (el,name){
  93. var tmp_data = "";
  94.     if(jQuery(el).attr("multiple")){ //Si es un select multiple
  95.         jQuery(el+" option:selected").each(function(i){
  96.             tmp_data = tmp_data+"&"+name+"="+jQuery(this).val();
  97.         });
  98.         if(tmp_data.length>0){
  99.             return tmp_data.substr(1);
  100.         }else{
  101.             return "";
  102.         }
  103.     }else if(/\[\]/.test(name)){ //Si es un input de varios names
  104.         jQuery(jQuery(el).get(0)+"[name='"+name+"']").each(function(i){
  105.             tmp_data = tmp_data+"&"+name+"="+jQuery(this).val();
  106.         });
  107.         if(tmp_data.length>0){
  108.             return tmp_data.substr(1);
  109.         }else{
  110.             return "";
  111.         }
  112.     }else{
  113.         if(jQuery(el).val()){
  114.             //alert(jQuery(el).attr("id")+jQuery(el).val());
  115.             tmp_data = name+"="+jQuery(el).val();
  116.         }
  117.         return tmp_data;
  118.     }
  119. }
  120.  
  121. ChangeHijo =  function(parametros){
  122. var padre = parametros['padre'];
  123. var hijo = parametros['hijo'];
  124. var file = parametros['url'];
  125. var array_data = parametros['bonus'];
  126. var propaga_hijo = true;
  127.  
  128.     if(/no_propaga/.test(padre)){
  129.         padre = ereg_replace(padre,"_no_propaga","");
  130.         propaga_hijo = false;              
  131.     }
  132.    
  133.     var padre_change = jQuery("#"+padre).change(function(){
  134.     var data_padre = "";
  135.     var data_bonus = "";
  136.     var temp_data;
  137.  
  138.         data_padre = getVals("#"+padre,jQuery("#"+padre).attr("name"));
  139.        
  140.         if(!isArray(array_data)){
  141.             array_data=[array_data];
  142.         }
  143.  
  144.         for (key in array_data){
  145.             //alert(key+array_data[key]);
  146.             temp_data = getVals("#"+array_data[key],jQuery("#"+array_data[key]).attr("name"));
  147.             data_bonus = data_bonus+"&"+temp_data;
  148.         }
  149.        
  150.         if(isArray(hijo)){
  151.             for (key in hijo){
  152.                 CargaSelect({
  153.                 hijo        : "#"+hijo[key],
  154.                 data        : data_padre,
  155.                 bonus       : data_bonus,
  156.                 file        : file[key],
  157.                 padre       : "#"+padre,
  158.                 propaga     : propaga_hijo,
  159.                 tipo        : parametros['tipo'],
  160.                 verifica    : parametros['verifica'],
  161.                 no_fail_msg : parametros['no_fail_msg'][key],
  162.                 al_final    : parametros['al_final'][key]
  163.                 });
  164.             }
  165.         }else{
  166.             CargaSelect({
  167.             hijo        : "#"+hijo,
  168.             data        : data_padre,
  169.             bonus       : data_bonus,
  170.             file        : file,
  171.             padre       : "#"+padre,
  172.             propaga     : propaga_hijo,
  173.             tipo        : parametros['tipo'],
  174.             verifica    : parametros['verifica'],
  175.             no_fail_msg : parametros['no_fail_msg'][key],
  176.             al_final    : parametros['al_final'][key]
  177.             });
  178.         }
  179.     });
  180.    
  181.     if(parametros['no_inicia']!=true){
  182.         padre_change.change();
  183.     }
  184. };
  185.  
  186. elementosDependientes = function(parametros){
  187.     for (key in parametros){
  188.         if(!parametros[key]['no_msg_al_fallar']){
  189.             parametros[key]['no_msg_al_fallar'] = true;
  190.         }
  191.         if(!parametros[key]['verifica_antes']){
  192.             parametros[key]['verifica_antes'] = true;  
  193.         }
  194.         if(!parametros[key]['al_final']){
  195.             parametros[key]['al_final'] = true;
  196.         }
  197.         ChangeHijo({
  198.                     padre       : key,
  199.                     hijo        : parametros[key]['hijo'],
  200.                     url         : parametros[key]['url'],
  201.                     bonus       : parametros[key]['bonus'],
  202.                     tipo        : parametros[key]['tipo'],
  203.                     no_inicia   : parametros[key]['no_carga_al_iniciar'],
  204.                     verifica    : parametros[key]['verifica_antes'],
  205.                     no_fail_msg : parametros[key]['no_msg_al_fallar'],
  206.                     al_final    : parametros[key]['al_final']
  207.                 });
  208.     };
  209. };
  210.  
  211.  
  212. elementosDependientes({
  213. "estacion"              : {
  214.                 hijo    : [
  215.                           "atributos_de_estacion",
  216.                           "datos",
  217.                           "rangos_de_variables"
  218.                 ],
  219.                 url   : [
  220.                           "../estaciones/obtenerAtributosPorVariable",
  221.                           "../informaciones_meteorologicas/obtenerPorVariable",
  222.                           "../variables/filtrarPorEstacion"
  223.                 ],
  224.                 bonus   : [
  225.                          "periodo_anio",
  226.                          "periodo_mes",
  227.                          "tipo_periodo"
  228.                 ],
  229.                 tipo    : "GET",
  230.                 no_msg_al_fallar
  231.                         :[
  232.                         true,
  233.                         false,
  234.                         true
  235.                 ],
  236. /////////////////////////////////////////////////////////////////////////////////////////////////
  237. //Desde aquí se van a mandar las funciones que están dentro de un array
  238. /////////////////////////////////////////////////////////////////////////////////////////////////
  239.                 al_final:[
  240.                         function(){ alert("hola1"); },
  241.                         function(){ alert("hola2"); },
  242.                         function(){ alert("hola3"); }
  243.                 ]
  244. /////////////////////////////////////////////////////////////////////////////////////////////////
  245. })
  246.  
  247.  
  248. </script>

Es un código para hacer "n" elementos dependientes (tipo pais, departamento, ciudad). Todo funciona ok (estoy usando jQuery, pero para mi problema no viene al caso), pero ahora quiero agregar una nueva funcionalidad, que se puedan poner funciones cuando se termine de llamar al ajax.

Como ves, la parte que tiene el índice "al_final", se supone que son funciones que se van a llamar cuando el Ajax termine, ahorita les he puesto simplemente un alert, porque son funciones que pueden hacer cualquier cosa, pero... NO funcionaaaaaaa

No se como llamar a una función dentro de otra de esa manera...

************************************************** ******************************
************************************************** ******************************
************************************************** ******************************
************************************************** ******************************
Bueh ya encontré la solución:

Yo ponía así:
Código javascript:
Ver original
  1. /////////////////////////////////////////////////////////////////////////////////////////////////
  2. /////////////////////////////////////////////////////////////////////////////////////////////////
  3.                     eval(parametros['al_final']);//Aquí es donde tengo el problema
  4. /////////////////////////////////////////////////////////////////////////////////////////////////

Y era así:
Código javascript:
Ver original
  1. /////////////////////////////////////////////////////////////////////////////////////////////////
  2. /////////////////////////////////////////////////////////////////////////////////////////////////
  3.         var f=parametros['al_final'];
  4.     if((typeof f)=="function"){
  5.         f();
  6.     }
  7. /////////////////////////////////////////////////////////////////////////////////////////////////
__________________
Mi blog

Última edición por Galled; 04/06/2009 a las 11:57
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 22:27.