Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/07/2008, 11:53
edysoftware
 
Fecha de Ingreso: mayo-2001
Mensajes: 10
Antigüedad: 23 años, 5 meses
Puntos: 0
combos, listas enlazados dinamicamente

hola:
he stado byscando codigo para usar 2 combos enlazados uno con otro.
encontre varios, pero tienen la desvantaja de que se tiene que refrescar la pagina, aun usando ajax, se hace una consulta a la DB.
encontre un codigo que hace lo que requiero (combos dinamico) pero con datos estaticos, es decir en el 1 selec se ponen por ejmplo los estados, y en otro combo se ponen las ciudades. como no encontre mas.. me puse q armar con php el codigo para que funcionar con php y mysql.
lo que se hace es consultar la db, tomar los registros del 1 select, depues se va haciendo consulta x consulta hasta armar el 2 select, y listo. el javascript se encarga de hacer los cambios sin necesidad de refrescar la pag
les paso el codigo espero que les sirva a alguien

ojo no esta completamente documentada.... despues cunado lo doc cambiare el codigo,

<html>
<body>


edysoftware at gmail dot com
[email protected]

<?php require_once('Connections/showautos.php');
mysql_select_db($database_showautos, $showautos);

$query_TipoVe = "SELECT TV.id, TV.01_descripciontipo FROM 01_tipovehiculo as TV";
$query_Marca = "SELECT M.id, M.06_marca FROM 06_marcas as M";


$resultT = mysql_query($query_TipoVe, $showautos) or die(mysql_error());
?>
<form name="f1">
<?
if ($row = mysql_fetch_array($resultT))
{
echo '<select name= "auto" onchange="cambia()" >';
echo '<option value= 0> - Todas - </option>';
$tot = 0;
do {
echo '<option value= "'.$row["id"].'">'.$row["01_descripciontipo"].'</option>';
$id_select[++$tot] = $row["id"];
} while ($row = mysql_fetch_array($resultT));
echo '</select>';
}
?>

<select name=segundo>
<option value="0">- Todas - </select>
</form>

<script>
//defino una serie de varibles Array para cada opcion del 1 select
<?
for ($i = 1; $i<= $tot; $i++)
{
$cadopc = "";
$cadval = "";
$query_Marca = "SELECT M.id, M.06_marca FROM 06_marcas as M Where 01_tipovehiculo = ".$id_select[$i];
$resultM = mysql_query($query_Marca, $showautos) or die(mysql_error());
if ($row = mysql_fetch_array($resultM)){
$cadopc = "var opc_seg_sel_".$i."=new Array('- Todas -' ";
$cadval = "var val_seg_sel_".$i."=new Array('0' ";
do {
//echo '<option value= "'.$row["id"].'">'.$row["06_marca"].'</option>';
$cadopc .= ",'". $row["06_marca"]."'";
$cadval .= ",'". $row["id"]."'";
} while ($row = mysql_fetch_array($resultM));
$cadopc .= ") \n";
$cadval .= ") \n";
}else
{ $cadopc = "var opc_seg_sel_".$i."=new Array('- No Disponibles -' ) \n";
$cadval = "var val_seg_sel_".$i."=new Array('0' )\n";
}
echo $cadopc;
echo $cadval;
}
?>
//función que cambia las opciones del select de opciones en función del primer selec que se haya escogido
function cambia(){
//tomo el valor del select del auto elegido
var auto
auto = document.f1.auto[document.f1.auto.selectedIndex].value
//veo si el auto está definido
if (auto != 0) {
//si estaba definido, entonces coloco las opciones del segundo correspondiente.
//selecciono el array de segundo adecuado
mis_opciones=eval("opc_seg_sel_" + auto)
mis_valores =eval("val_seg_sel_" + auto)
//calculo el numero de opciones
num_opciones = mis_opciones.length
//marco el número de opciones en el select
document.f1.segundo.length = num_opciones
//para cada segundo del array, la introduzco en el select
for(i=0;i<num_opciones;i++){
document.f1.segundo.options[i].value=mis_valores[i]
document.f1.segundo.options[i].text=mis_opciones[i]
}
}else{
//si no había segundo seleccionada, elimino las provincias del select
document.f1.segundo.length = 1
//coloco un guión en la única opción que he dejado
document.f1.segundo.options[0].value = "- Todas -"
document.f1.segundo.options[0].text = "- Todas -"
}
//marco como seleccionada la opción primera de segundo
document.f1.segundo.options[0].selected = true
}
</script>
</body>
</html>