<script>
CargandoMsg = function(id){
if(jQuery(id).get(0)){
var tag = jQuery(id).get(0).tagName;
switch(tag){
case "SELECT":
jQuery(id).attr("disabled","true");
jQuery(id).html('<option value="cargando">Cargando...</option>');
break;
case "DIV":
jQuery(id).html('');
jQuery(id).addClass("cargando");
break;
case "INPUT":
jQuery(id).attr("value","cargando...");
jQuery(id).attr("disabled","true");
break;
}
return tag
}
}
CargandoFail = function(parametros){
var tag = jQuery(parametros["hijo"]).get(0);
if(tag && parametros["propaga"]){
var tag = tag.tagName;
switch(tag){
case "SELECT":
jQuery(parametros["hijo"]).html('<option value="cargando">Sin valores</option>');
jQuery(parametros["hijo"]).change();
break;
case "DIV":
if(!parametros['no_fail_msg']){
jQuery(parametros["hijo"]).html('No se han encontrado valores.');
}
jQuery(parametros["hijo"]).removeClass("cargando");
break;
case "INPUT":
jQuery(parametros["hijo"]).attr("value","--");
jQuery(parametros["hijo"]).attr("disabled","true");
break;
}
}
}
CargaSelect = function(parametros){
var div = parametros["hijo"]+"_"; //select es el hijo.
var tag;
var verifica = false;
if(!parametros["tipo"]){
parametros["tipo"] = "POST";
}
if(parametros["verifica"]){
verifica = parametros["verifica"];
}
if((parametros["data"]) && !(/cargando$/.test(parametros["data"]))){
tag = CargandoMsg(parametros["hijo"]);
jQuery.ajax({
type: parametros["tipo"],
url: parametros["file"],
data: parametros["data"]+parametros["bonus"],
success: function(div){
switch(tag){
case "INPUT":
jQuery(parametros["hijo"]).val(div);
break;
default:
if(div!=jQuery(parametros["hijo"]).html()){
jQuery(parametros["hijo"]).html(div);
}
break;
}
jQuery(parametros["hijo"]).removeAttr("disabled");
jQuery(parametros["hijo"]).removeClass("cargando");
if(parametros["propaga"]){
jQuery(parametros["hijo"]).change();
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
eval(parametros['al_final']);//Aquí es donde tengo el problema
/////////////////////////////////////////////////////////////////////////////////////////////////
}
});
}else if((!parametros["data"]) || (/cargando$/.test(parametros["data"]))){
CargandoFail(parametros);
}
};
getVals = function (el,name){
var tmp_data = "";
if(jQuery(el).attr("multiple")){ //Si es un select multiple
jQuery(el+" option:selected").each(function(i){
tmp_data = tmp_data+"&"+name+"="+jQuery(this).val();
});
if(tmp_data.length>0){
return tmp_data.substr(1);
}else{
return "";
}
}else if(/\[\]/.test(name)){ //Si es un input de varios names
jQuery(jQuery(el).get(0)+"[name='"+name+"']").each(function(i){
tmp_data = tmp_data+"&"+name+"="+jQuery(this).val();
});
if(tmp_data.length>0){
return tmp_data.substr(1);
}else{
return "";
}
}else{
if(jQuery(el).val()){
//alert(jQuery(el).attr("id")+jQuery(el).val());
tmp_data = name+"="+jQuery(el).val();
}
return tmp_data;
}
}
ChangeHijo = function(parametros){
var padre = parametros['padre'];
var hijo = parametros['hijo'];
var file = parametros['url'];
var array_data = parametros['bonus'];
var propaga_hijo = true;
if(/no_propaga/.test(padre)){
padre = ereg_replace(padre,"_no_propaga","");
propaga_hijo = false;
}
var padre_change = jQuery("#"+padre).change(function(){
var data_padre = "";
var data_bonus = "";
var temp_data;
data_padre = getVals("#"+padre,jQuery("#"+padre).attr("name"));
if(!isArray(array_data)){
array_data=[array_data];
}
for (key in array_data){
//alert(key+array_data[key]);
temp_data = getVals("#"+array_data[key],jQuery("#"+array_data[key]).attr("name"));
data_bonus = data_bonus+"&"+temp_data;
}
if(isArray(hijo)){
for (key in hijo){
CargaSelect({
hijo : "#"+hijo[key],
data : data_padre,
bonus : data_bonus,
file : file[key],
padre : "#"+padre,
propaga : propaga_hijo,
tipo : parametros['tipo'],
verifica : parametros['verifica'],
no_fail_msg : parametros['no_fail_msg'][key],
al_final : parametros['al_final'][key]
});
}
}else{
CargaSelect({
hijo : "#"+hijo,
data : data_padre,
bonus : data_bonus,
file : file,
padre : "#"+padre,
propaga : propaga_hijo,
tipo : parametros['tipo'],
verifica : parametros['verifica'],
no_fail_msg : parametros['no_fail_msg'][key],
al_final : parametros['al_final'][key]
});
}
});
if(parametros['no_inicia']!=true){
padre_change.change();
}
};
elementosDependientes = function(parametros){
for (key in parametros){
if(!parametros[key]['no_msg_al_fallar']){
parametros[key]['no_msg_al_fallar'] = true;
}
if(!parametros[key]['verifica_antes']){
parametros[key]['verifica_antes'] = true;
}
if(!parametros[key]['al_final']){
parametros[key]['al_final'] = true;
}
ChangeHijo({
padre : key,
hijo : parametros[key]['hijo'],
url : parametros[key]['url'],
bonus : parametros[key]['bonus'],
tipo : parametros[key]['tipo'],
no_inicia : parametros[key]['no_carga_al_iniciar'],
verifica : parametros[key]['verifica_antes'],
no_fail_msg : parametros[key]['no_msg_al_fallar'],
al_final : parametros[key]['al_final']
});
};
};
elementosDependientes({
"estacion" : {
hijo : [
"atributos_de_estacion",
"datos",
"rangos_de_variables"
],
url : [
"../estaciones/obtenerAtributosPorVariable",
"../informaciones_meteorologicas/obtenerPorVariable",
"../variables/filtrarPorEstacion"
],
bonus : [
"periodo_anio",
"periodo_mes",
"tipo_periodo"
],
tipo : "GET",
no_msg_al_fallar
:[
true,
false,
true
],
/////////////////////////////////////////////////////////////////////////////////////////////////
//Desde aquí se van a mandar las funciones que están dentro de un array
/////////////////////////////////////////////////////////////////////////////////////////////////
al_final:[
function(){ alert("hola1"); },
function(){ alert("hola2"); },
function(){ alert("hola3"); }
]
/////////////////////////////////////////////////////////////////////////////////////////////////
})
</script>