二级联动(无刷新、数据库)

数据库中有表:Major
结构如下:
MajorName Dept
应用与维护专业 计算机系
商务英语专业 外语系
软件工程专业 计算机系
........... ........
............ .........
代码如下:
<html>
<script>

function ChangeDept()
{
.....
}

</script>

<select name="Dept"size="1" onChange="ChangeDept()">
..................'option 从数据库创建
<option value="系别1">系别1</option>
<option value="系别2">系别2</option>
...................
</select>

<select name="Major"size="1">
..................'option 从数据库创建
<option value="专业1">专业1</option>
<option value="专业2">专业2</option>
..............
</select>

</html>

可以说是二级联动(数据库)问题,还是解释一下吧.
第一次进入时,第一个select显示计算机系 第二个select显示其相应的专业名,这时第二个下拉框
应该有"应用与维护专业"、 "软件工程专业".....
当从第一个select选一个专业时,比如选外语系,第二个select里就会有 "商务英语专业"、....
我是这样做的:

sql="select MajorName,Dept FROM st_Major"
set rst=cn.Execute(sql)
MajorArray=rs.GetRows ////返回一个二维数组,没问题的MajorArray(0,0),MajorArray(0,1)里面都有内容

的,数据库方面应该没有问题的,可以略过....

function ChangeDept()
{
document.all.Major.innerHTML=""
var DeptValue=document.getElementById("Dept").value //将第一个select选择的value传给变量
for....//这个循环将Dept字段和DeptValue作比较找出与系别相应的专业,这个用循环查所有记录就可以了,我

会。
{
var slt=document.getElementById("Major");
var objOption=document.createElement("OPTION");
objOption.value=DeptValue;
objOption.text=MajorArray(1,0);
}
}

在测试的时候出现问题,点了没反应,是不是 objOption.text=MajorArray(1,0) 这句有问题?
为了测试我改成这样:
function ChangeDept()
{
document.all.Major.innerHTML=""
var slt=document.getElementById("Major");
var objOption=document.createElement("OPTION");
objOption.value=DeptValue;
objOption.text="aaaaa";
}

这样就可以添加一个option,郁闷中,不知道问题出在哪里。。。。在这里请教大家了,或许我的方法不对
大家可以给个详细、好点的例子,问题解决再+100分!麻烦大家了!

哇,这么多分,真爽。

我的空间里面我以前贴过一篇三级联动的例子,我现在又给你写了一个两级联动的代码例子,在IE上测试通过,但愿其它浏览器能过,因为我没有安装别的软件,我害怕你让我一定要在别的环境调试。

下面的代码是HTML部分,数据库内容提取部分我相信你没有问题,你的ASP水平肯定比我好,稍微测试几下就能过的。

我写的例子代码如下:

<html>
<head>
<title>两级联动表单</title>
<script language="javascript">
//下面一行(仅仅一行)的内容由数据库输出
var strs='计算机系 应用与维护专业 软件工程专业|外语系 商务英语专业 其它外语专业';
//上面这一行从数据库里面提取,使用ASP应该非常简单,比如:
//response.write "var str='"
//last_dep=""
//do while not rs.eof
//if rs("Dept")<>last_dep and last_dep<>"" then response.write "|"&rs("Dept")
//response.write " "&rs("MajorName")
//last_dep=rs("Dept")
//loop
var opts=new Array();
//下面的代码利用数据库取出的strs变量,生成数组opts
var i,j,Dept,MajorName;
Dept=strs.split('|');
for (i=0;i<Dept.length;i++){
opts[i]=new Array();
MajorName=Dept[i].split(/\s+/);
for (j=0;j<MajorName.length;j++){opts[i][j]=MajorName[j];}
}
//下面的函数初始化联动表单
function setup()
{
var Dept=document.getElementById('id_Dept');
with(Dept){
length = 0;
for(i=0;i<opts.length;i++)
options[length]=new Option(opts[i][0],opts[i][0]);
}
Dept_Changed();
}
//下面的函数在改变系时改变专业
function Dept_Changed(){
var Dept=document.getElementById('id_Dept').selectedIndex;
var MajorName=document.getElementById('id_MajorName');
with(MajorName){
length = 0;
for(i=1;i<opts[Dept].length;i++)
options[length]=new Option(opts[Dept][i],opts[Dept][i]);
}
}
</script>
</head>
<body>
<form>
<Select id="id_Dept" NAME="Dept" onChange="Dept_Changed();"></Select>
<Select id="id_MajorName" NAME="MajorName"></Select>
</form>
<!--js初始化函数-->
<SCRIPT language="javascript">
setup()
</SCRIPT>
</body>
</html>

有不明白的请你补充。

不过我相信你已经明白了,核心部分就是strs变量的组装,不同系之间用|分隔,一个系里面是系名开头,然后是各专业,中间用空格分隔。

祝你好运。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-17
靠!看不懂
相似回答