<form name="frm">
<select name="s1" onChange="redirec(document.frm.s1.options.selectedIndex)">
 <option selected>请选择</option>
 <option value="1">内科</option>
 <option value="2">内科</option>
 <option value="3">内科</option>
</select>
<select name="s2">
 <option value="请选择" selected>请选择</option>
</select>
</form>
<script language="javascript">
//获取一级菜单长度
var select1_len = document.frm.s1.options.length;
var select2 = new Array(select1_len);//把一级菜单都设为数组
for (i=0; i<select1_len; i++) 
{
 select2[i] = new Array();
}//定义基本选项
<?php
$link = mysql_connect('localhost', 'root', '123456');
if (!$link) {    
die('Could not connect: ' . mysql_error());
}mysql_select_db('doctor'); 
mysql_query("set names 'gb2312'"); 
$skill = array("内科","内科","内科");
for($i=1;$i<=sizeof($skill);$i++){
 $y=1;
 $sql = "select name from doctor where major like '%$skill[$i]%' ";
 $re = mysql_query($sql);   
 while($data = mysql_fetch_array($re)){
  echo "select2[$i][$y] = new Option($data[0],'')";
  $y = $y+1;
  echo $data[0];
 }
}
?>//联动函数
function redirec(x)
{
 var temp = document.frm.s2; 
 for (i=0;i<select2[x].length;i++)
 {
  temp.options[i]=new Option(select2[x][i].text,select2[x][i].value);
 }
 temp.options[0].selected=true;}</script>第一个下拉菜单是事先写好的,第二个是从数据库中查询得出的,但是这个代码第二个菜单无法通过查询数据库得到选项,不知为何。。

解决方案 »

  1.   


    <form name="frm">
    <select name="s1" onChange="redirec(this.value)">
     <option selected>请选择</option>
     <option value="1">内科</option>
     <option value="2">内科</option>
     <option value="3">内科</option>
    </select>
    <div id="s2"></div>
    </form>
    <script>
    //Ajax
    var xmlHttp; function createXMLHttpRequest() {
    if(window.XMLHttpRequest) {
    xmlHttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    } function record(id){
    createXMLHttpRequest();
    url = "action.php?id="+id+"&ran="+Math.random();
    method = "GET";
    xmlHttp.open(method,url,true);
    xmlHttp.onreadystatechange = show;
    xmlHttp.send(null);
    } function show(){
    if (xmlHttp.readyState == 4){
    if (xmlHttp.status == 200){
    var text = xmlHttp.responseText;
    document.getElementById("s2").innerHTML = text;
    }else {
    alert("response error code:"+xmlHttp.status);
    }
    }
    }
    </script>
    <?php
    #action.php
    if(isset($_GET['id'])){
    $sql="select * from table where id=".$_GET['id'];
    $res=mysql_query($sql);
    if(!$res) die("SQL: {$sql} <br>Error:".mysql_error());
    if(mysql_affected_rows() > 0){
    $arrMenu=array();
    while($rows = mysql_fetch_array(MYSQL_ASSOC)){
    array_push($arrMenu,$rows);
    }
    }
    mysql_close();
    if(!empty($arrMenu)){
    echo "<select name='menu2'>";
    foreach($arrMenu as $item2){
    echo "<option value='{$item2['id']}'>{$item2['name']}</option>";
    }
    echo "</select>";
    }
    }?>
      

  2.   

    我是初学者...楼上大哥这个略有点看不懂..MYSQL_ASSOC是什么?
      

  3.   

    多看看php手册吧,
    “mysql_fetch_array — 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
    ……
    ……
    mysql_fetch_array()中可选的第二个参数 result_type是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH。本特性是 PHP 3.0.7 起新加的。本参数的默认值是 MYSQL_BOTH。 如果用了 MYSQL_BOTH,将得到一个同时包含关联和数字索引的数组。用 MYSQL_ASSOC 只得到关联索引(如同 mysql_fetch_assoc() 那样),用 MYSQL_NUM 只得到数字索引(如同 mysql_fetch_row() 那样)。 
      

  4.   

    PHP手册:http://download.csdn.net/detail/dmtnewtons/4122897
    函数参考->mysql函数->mysql_fetch_array()