Fijate si esto te sirve, al seleccionar un área se actualiza el combo de subáreas, en caso que no haya subáreas para el área seleccionada lo que hago es ocultar el combo de subáreas (en todo caso esto último se podría eliminar si no lo necesitas.
Creo que vas a poder adaptar este script a lo que vos necesitas.
Código HTML:
AREA:
<select id="AreaID" name="AreaID" onchange="chArea(this.value)">
<?
$C=mysql_query("SELECT id, Area FROM areas ORDER BY Area");
while ($R=mysql_fetch_array($C))
{
echo "<option value=\"".$R["id"]."\">".$R["Area"]."</option>\n";
}
mysql_free_result($C);
?>
</select>
<br>
SUBÁREA:
<select id="SubareaID" name="SubareaID">
</select>
<script type="text/javascript">
<!--
var SubareaID=new Array();
var Subarea=new Array();
var SubareaAreaID=new Array();
<?
$cant=0;
$C=mysql_query("SELECT id, Subarea, AreaID FROM subareas ORDER BY AreaID, Subarea");
while ($R=mysql_fetch_array($C))
{
echo " SubareaID[$cant]=".$R["id"]."; Subarea[$cant]='".$R["Subarea"]."'; SubareaAreaID[$cant]=".$R["AreaID"].";\n";
$cant++;
}
mysql_free_result($C);
?>
function chArea(id)
{
var HaySubs=false;
var a;
var b;
for (a=0; a<SubareaAreaID.length; a++)
{
if (SubareaAreaID[a]==id)
{
HaySubs=true;
break;
}
}
get('SubareaID').value=0;
if (HaySubs)
{
var cant=0;
get('SubareaID').length=SubareaAreaID.length;
get('SubareaID').value=0;
for (a=0; a<SubareaAreaID.length; a++)
{
if (SubareaAreaID[a]==id)
{
get('SubareaID').options[cant].value=SubareaID[a];
get('SubareaID').options[cant].text=Subarea[a];
get('SubareaID').options[cant].selected=false;
cant++;
}
}
get('SubareaID').length=cant;
get('SubareaID').style.display='block';
}
else
{
get('SubareaID').length=0;
get('SubareaID').style.display='none';
}
}
//-->
</script>
Para Explorer y Firefox funciona bien, otros navegadores... mmm... tengo mis dudas.
Suerte. Saludos.
Gustavo.