Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/07/2012, 11:40
bartman742
 
Fecha de Ingreso: enero-2012
Mensajes: 64
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: varios select dependientes

y estas son las funciones en js.

select_dependientes.js
Código Javascript:
Ver original
  1. function nuevoAjax()
  2. {
  3.     /* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
  4.     lo que se puede copiar tal como esta aqui */
  5.     var xmlhttp=false;
  6.     try
  7.     {
  8.         // Creacion del objeto AJAX para navegadores no IE
  9.         xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
  10.     }
  11.     catch(e)
  12.     {
  13.         try
  14.         {
  15.             // Creacion del objet AJAX para IE
  16.             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  17.         }
  18.         catch(E)
  19.         {
  20.             if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
  21.         }
  22.     }
  23.     return xmlhttp;
  24. }
  25.  
  26. // Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
  27. var listadoSelects=new Array();
  28. listadoSelects[0]="paises";
  29. listadoSelects[1]="estados";
  30.  
  31.  
  32. function buscarEnArray(array, dato)
  33. {
  34.     // Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
  35.     var x=0;
  36.     while(array[x])
  37.     {
  38.         if(array[x]==dato) return x;
  39.         x++;
  40.     }
  41.     return null;
  42. }
  43.  
  44. function cargaContenido(idSelectOrigen)
  45. {
  46.     // Obtengo la posicion que ocupa el select que debe ser cargado en el array declarado mas arriba
  47.     var posicionSelectDestino=buscarEnArray(listadoSelects, idSelectOrigen)+1;
  48.     // Obtengo el select que el usuario modifico
  49.     var selectOrigen=document.getElementById(idSelectOrigen);
  50.     // Obtengo la opcion que el usuario selecciono
  51.     var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
  52.     // Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."
  53.     if(opcionSeleccionada==0)
  54.     {
  55.         var x=posicionSelectDestino, selectActual=null;
  56.         // Busco todos los selects siguientes al que inicio el evento onChange y les cambio el estado y deshabilito
  57.         while(listadoSelects[x])
  58.         {
  59.             selectActual=document.getElementById(listadoSelects[x]);
  60.             selectActual.length=0;
  61.            
  62.             var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Selecciona Opción...";
  63.             selectActual.appendChild(nuevaOpcion);  selectActual.disabled=true;
  64.             x++;
  65.         }
  66.     }
  67.     // Compruebo que el select modificado no sea el ultimo de la cadena
  68.     else if(idSelectOrigen!=listadoSelects[listadoSelects.length-1])
  69.     {
  70.         // Obtengo el elemento del select que debo cargar
  71.         var idSelectDestino=listadoSelects[posicionSelectDestino];
  72.         var selectDestino=document.getElementById(idSelectDestino);
  73.         // Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
  74.         var ajax=nuevoAjax();
  75.         ajax.open("GET", "select_dependientes_proceso.php?select="+idSelectDestino+"&opcion="+opcionSeleccionada, true);
  76.         ajax.onreadystatechange=function()
  77.         {
  78.             if (ajax.readyState==1)
  79.             {
  80.                 // Mientras carga elimino la opcion "Selecciona Opcion..." y pongo una que dice "Cargando..."
  81.                 selectDestino.length=0;
  82.                 var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
  83.                 selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;   
  84.             }
  85.             if (ajax.readyState==4)
  86.             {
  87.                 selectDestino.parentNode.innerHTML=ajax.responseText;
  88.             }
  89.         }
  90.         ajax.send(null);
  91.     }
  92. }