Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/06/2009, 08:26
Avatar de Galled
Galled
 
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 19 años, 10 meses
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