Bueno, gracias a
skatomundo que dio solucion a mi problema.
Aqui dejo el codigo completo de listas dependientes para los que lo esten necesitando:
Primer archivo:
select_dependientes.php
Codigo AJAX.
Código:
<script language="javascript" type="text/javascript">
function nuevoAjax()
{
/* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
lo que se puede copiar tal como esta aqui */
var xmlhttp=false;
try
{
// Creacion del objeto AJAX para navegadores no IE
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
// Creacion del objet AJAX para IE
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(E) { xmlhttp=false; }
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); }
return xmlhttp;
}
function cargaContenido()
{
var valor=document.getElementById("select_0").options[document.getElementById("select_0").selectedIndex].value;
if(valor==0)
{
// Si el usuario eligio la opcion "Elige", no voy al servidor y pongo todo por defecto
combo=document.getElementById("select_1");
combo.length=0;
var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Elegir una marca";
combo.appendChild(nuevaOpcion); combo.disabled=true;
}
else
{
ajax=nuevoAjax();
ajax.open("GET", "select_dependientes_proceso.php?seleccionado="+valor, true);
ajax.onreadystatechange=function()
{
if (ajax.readyState==1)
{
// Mientras carga elimino la opcion "Elige pais" y pongo una que dice "Cargando"
combo=document.getElementById("select_1");
combo.length=0;
var Indice=window.document.form1.marcas.selectedIndex;
document.form1.MARCANOMBRE.value=document.form1.marcas.options[Indice].text;
var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
combo.appendChild(nuevaOpcion); combo.disabled=true;
}
if (ajax.readyState==4)
{
document.getElementById("fila_2").innerHTML=ajax.responseText;
}
}
ajax.send(null);
}
}
</script>
Codigo PHP (contiene el primer select)
Código PHP:
<td id="fila_1" align="left"><?php
function generaPaises()
{
$coneccion=mysql_connect("localhost", "city45_user", "city") or die(mysql_error());
mysql_select_db("city45_avisos", $coneccion) or die(mysql_error());
$consulta=mysql_query("SELECT * FROM auto_marcas ORDER BY id_marcas ASC");
mysql_close($coneccion);
// Voy imprimiendo el primer select compuesto por los paises
echo "<select class='combo' id='select_0' name='marcas' onChange='cargaContenido()'>";
while($registro=mysql_fetch_row($consulta))
{
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
}
echo "</select>";
}
?> <?php generaPaises(); ?><input type="hidden" name="MARCANOMBRE" value=""></td>
Código:
<td id="fila_2" align="left"><select class="combo" disabled="disabled" id="select_1" name="modelos">
<option id="valor_defecto" value="0">Seleccione un modelo</option>
</select></td>
select_dependientes_proceso.php
Codigo PHP (contiene el segundo select que depende del primero)
Código PHP:
<?php
function validaValor($parametro)
{
/* Funcion utilizada para validar el numero de pais recibido por GET. En nuestra base
de datos tenemos como validos los paises desde 1 a 21 */
if(eregi("^[0-9]{1,2}$", $parametro))
{
if($parametro>=1 && $parametro<=44) return TRUE;
else return FALSE;
}
else return FALSE;
}
$valor=$_GET["seleccionado"];
if(validaValor($valor))
{
// Si el numero corresponde a un codigo de pais valido paso a procesar
$coneccion=mysql_connect("localhost", "city45_user", "city") or die(mysql_error());
mysql_select_db("city45_avisos", $coneccion) or die(mysql_error());
// Genero la consulta trayendo todos los estados que correspondan al codigo de pais elegido
$consulta=mysql_query("SELECT * FROM auto_modelos WHERE id_modelos='$valor'");
mysql_close($coneccion);
// Comienzo a imprimir el select
echo "<select class='combo' id='select_1' name='modelos'>";
while($registro=mysql_fetch_row($consulta))
{
// Paso a HTML acentors y ñ para su correcta visualizacion
$registro[1]=htmlentities($registro[1]);
// Imprimo las opciones del select
echo "<option value='".$registro[2]."'>".$registro[2]."</option>";
}
echo "</select>";
}
?>
Bueno, cualquier cosa me consultan.
Muchas gracias skatomundo y hasta la proxima consulta