<form name="form">
一级类:<select name=Study_class ><option selected>请选择教材版本</option></select>
二级类:<select name=Academy ><option selected>请选择年级册别</option></select>
三级类:<select name=Special1 ><option selected>请选择单元类别</option></select>
四级类:<select name=Special2><option selected>请选择课文名称</option></select>
<label>
<input type="submit" name="Submit" value="查找">
</label>
</form>
求相关四级联动代码?
现有ACC数据库data.mdb,数据库中有4个表:card grade unite name分别对应四个级别,怎样联动查询?
一级类:<select name=Study_class ><option selected>请选择教材版本</option></select>
二级类:<select name=Academy ><option selected>请选择年级册别</option></select>
三级类:<select name=Special1 ><option selected>请选择单元类别</option></select>
四级类:<select name=Special2><option selected>请选择课文名称</option></select>
<label>
<input type="submit" name="Submit" value="查找">
</label>
</form>
求相关四级联动代码?
现有ACC数据库data.mdb,数据库中有4个表:card grade unite name分别对应四个级别,怎样联动查询?
2007-8-10 16:15
SinNeR
一种实现方法就是跟二级联动的原理是一样的。
不去管四级联动,始终注意上下级联动的实现的正确,这样就能保证整个联动的正确性。
另外要注意的是,当一个select控件被上级控制发生变化的时候,所有的下级select控件都要清空。
不去管四级联动,始终注意上下级联动的实现的正确,这样就能保证整个联动的正确性。
另外要注意的是,当一个select控件被上级控制发生变化的时候,所有的下级select控件都要清空。
2007-8-10 16:20
网狂
可否指点个相关例子,参考一下!拜托!
2007-8-10 16:29
SinNeR
[url]http://search.blueidea.com/?q=%E4%BA%8C%E7%BA%A7%E8%81%94%E5%8A%A8&tr=bbs[/url]
其实,如果不用ajax来实现的话,其实现过程大体如下
1。从数据库中取得需要的数据。
2。将数据拼写成字符串,拼写的字符串为javascript中可识别的数组或者其他格式的容器。
3。写javascript函数,操作javascript数组,实现菜单联动。
第2步第3步应该有类似的很成熟的代码。第一步要看你数据库的结构。
你可以分开来实现,先实现静态的页面根据javascript的数组元素实现联动,然后实现从数据库将取得的数据拼写成规定的形式。
这种方法并不是很好,察看源代码的时候会发现许多冗余代码。
有兴趣的话,可以把数据库对应表的结构贴出来,一起讨论一下。
其实,如果不用ajax来实现的话,其实现过程大体如下
1。从数据库中取得需要的数据。
2。将数据拼写成字符串,拼写的字符串为javascript中可识别的数组或者其他格式的容器。
3。写javascript函数,操作javascript数组,实现菜单联动。
第2步第3步应该有类似的很成熟的代码。第一步要看你数据库的结构。
你可以分开来实现,先实现静态的页面根据javascript的数组元素实现联动,然后实现从数据库将取得的数据拼写成规定的形式。
这种方法并不是很好,察看源代码的时候会发现许多冗余代码。
有兴趣的话,可以把数据库对应表的结构贴出来,一起讨论一下。
2007-8-10 16:51
网狂
表一:card结构 ------CardID(数字类型) CardName(文本)
1 人教版
2 苏教版
表二:grade 结构------GradeID(数字类型) GradeName(文本) CardID(数字类型)
1 七年级上册 1
2 七年级下册 1
3 七年级上册 2
4 七年级下册 2
表三:unite结构------UniteID(数字类型) UniteName(文本) GradeID(数字类) CardID(数字类型)
1 第一单元 1 1
2 第二单元 2 1
3 第三单元 1 2
4 第一单元 2 2
表四:Name结构------NameID(数字类型) NameName(文本) UniteID GradeID CardID
1 苏州园林 1 1 1
2 白杨礼赞 1 2 1
3 陈毅市长 2 2 2
1 人教版
2 苏教版
表二:grade 结构------GradeID(数字类型) GradeName(文本) CardID(数字类型)
1 七年级上册 1
2 七年级下册 1
3 七年级上册 2
4 七年级下册 2
表三:unite结构------UniteID(数字类型) UniteName(文本) GradeID(数字类) CardID(数字类型)
1 第一单元 1 1
2 第二单元 2 1
3 第三单元 1 2
4 第一单元 2 2
表四:Name结构------NameID(数字类型) NameName(文本) UniteID GradeID CardID
1 苏州园林 1 1 1
2 白杨礼赞 1 2 1
3 陈毅市长 2 2 2
2007-8-10 17:44
SinNeR
首先,数据库连接
取得如下的记录集
[code]
SELECT CardID CardName FROM card
[/code]
[code]
SELECT GradeID,GradeName,CardID FROM grade
[/code]
[code]
SELECT UniteID,UniteName,GradeID FROM unite
[/code]
[code]
SELECT NameID,NameName,UniteID FROM Name
[/code]
遍历ResultSet应该很熟悉了。
遍历的时候拼写成如下的字符串格式。
比如对于card表的记录集
var aCard=new Array();
aCard[0]=new Array();
aCard[0][0]="1";
aCard[0][1]="人教版";
aCard[1]=new Array();
aCard[1][0]="1";
aCard[1][1]="苏教版";
注意,aCard[0]=new Array();是头部,不参与循环。
aCard[0]=new Array();
aCard[0][0]="1";
aCard[0][1]="人教版";
是RS中循环要实现的。通过索引,各个字段名来拼写。
拼写完的字符串,在页面script代码中输出。
如ASP中拼写的字符串名位 strACard
<script language="javascript">
<%=strACard%>
</script>
其他几个类似。
取得如下的记录集
[code]
SELECT CardID CardName FROM card
[/code]
[code]
SELECT GradeID,GradeName,CardID FROM grade
[/code]
[code]
SELECT UniteID,UniteName,GradeID FROM unite
[/code]
[code]
SELECT NameID,NameName,UniteID FROM Name
[/code]
遍历ResultSet应该很熟悉了。
遍历的时候拼写成如下的字符串格式。
比如对于card表的记录集
var aCard=new Array();
aCard[0]=new Array();
aCard[0][0]="1";
aCard[0][1]="人教版";
aCard[1]=new Array();
aCard[1][0]="1";
aCard[1][1]="苏教版";
注意,aCard[0]=new Array();是头部,不参与循环。
aCard[0]=new Array();
aCard[0][0]="1";
aCard[0][1]="人教版";
是RS中循环要实现的。通过索引,各个字段名来拼写。
拼写完的字符串,在页面script代码中输出。
如ASP中拼写的字符串名位 strACard
<script language="javascript">
<%=strACard%>
</script>
其他几个类似。
2007-8-10 18:48
SinNeR
然后就是javascript的方法了。
这个方法可以写的共通些。
首先分析,我们的操作就是要把javascript数组中的元素生成SELECT控件的option对象。
比如select控件名为
<select name=Study_class ><option selected>请选择教材版本</option></select>
要显示的数组为aCard
基本的语句就是
document.forms[0].Study_class[i] = new Option(aCard[i][1],aCard[i][0]);
现在分析共通的javascript函数的流程,首先注意到最上级别控件要显示数组中全部的元素,而其余级别的Select控件要显示选择好了父元素对应的子元素。所以要区别开来。
另,如果第一层select控件选择变更的时候,第二层select控件刷新,那么第三,四层select控件中的元素就要清空。不然会有错误的。
综合以上,仔细的分析后,可以得到这个共通函数的逻辑大体如下
[code]
参数:
sltObj:要表示的select控件对象。
arrObj:要操作的数组对象
sltIndex:当前选择的option控件的value。 -1的时候代表没有选择,全部显示。
level:当前select控件的层次 用于判断是否要清空下层以后的控件。
流程
1。判断要生成的option数组的大小。
如果sltIndex为-1,则要生成的option数组的大小为arrObj的大小。
如果sltIndex不为-1,遍历arrObj,计算arrObj[i][2]的值为sltIndex的个数,这个值就是option数组的大小。
设得到的值为size.
定义option的大小。
sltObj.length = size;
2。初始化数组的Option对象。
首先清空Select控件中的Option。
如果sltIndex为-1,将全部的arrObj中的元素显示出来。
如果sltIndex不为-1,遍历arrObj,将arrObj[i][2]的值为sltIndex的数据显示出来。
具体代码为
sltObj[i] = new Option(arrObj[i][1],aarrObj[i][0]);
3。判断是否有要清空的对象。
这个时候要注意,可以在Script中先定义一个全局变量,用来存储各个Select控件。
比如,
allSltObj = new array();
allSltObj[0]= document.forms[0].Study_class;
...
判断
如果level + 2 > allSltObj.length,什么也不做。
否则,
for ( i = level + 2 -1;i<allSltObj.length;i++ ){
清空allSltObj[i]中的Option对象。
}
[/code]
以上就是这个函数的核心部分,另,细节上,避免某些触发事件出问题,建议给每个Select控件都加上形如<option selected>请选择教材版本</option>之类的选项。
调用的时候,基本如下
整个页面被初期化的时候,调用这个函数,初始化第一个select控件,其他的不管。
第一个至第三个空间触发onChange事件的时候,调用这个方法。
传入的参数依次如下
sltObj:下一个select对象。
arrObj:对应的存储下一个select控件中的数据的数组。
sltIndex:当前控件被选择的value。
level:当前select控件的层次。
基本上就是这样的流程了,这个方法的缺点是,数据很多的时候,打开页面,会发现好多代码。
而且初期化会很慢。
优点是只在初始化请求服务器,其他时候不会请求服务器。
具体是否要用看你的业务的特点来定。
这个方法可以写的共通些。
首先分析,我们的操作就是要把javascript数组中的元素生成SELECT控件的option对象。
比如select控件名为
<select name=Study_class ><option selected>请选择教材版本</option></select>
要显示的数组为aCard
基本的语句就是
document.forms[0].Study_class[i] = new Option(aCard[i][1],aCard[i][0]);
现在分析共通的javascript函数的流程,首先注意到最上级别控件要显示数组中全部的元素,而其余级别的Select控件要显示选择好了父元素对应的子元素。所以要区别开来。
另,如果第一层select控件选择变更的时候,第二层select控件刷新,那么第三,四层select控件中的元素就要清空。不然会有错误的。
综合以上,仔细的分析后,可以得到这个共通函数的逻辑大体如下
[code]
参数:
sltObj:要表示的select控件对象。
arrObj:要操作的数组对象
sltIndex:当前选择的option控件的value。 -1的时候代表没有选择,全部显示。
level:当前select控件的层次 用于判断是否要清空下层以后的控件。
流程
1。判断要生成的option数组的大小。
如果sltIndex为-1,则要生成的option数组的大小为arrObj的大小。
如果sltIndex不为-1,遍历arrObj,计算arrObj[i][2]的值为sltIndex的个数,这个值就是option数组的大小。
设得到的值为size.
定义option的大小。
sltObj.length = size;
2。初始化数组的Option对象。
首先清空Select控件中的Option。
如果sltIndex为-1,将全部的arrObj中的元素显示出来。
如果sltIndex不为-1,遍历arrObj,将arrObj[i][2]的值为sltIndex的数据显示出来。
具体代码为
sltObj[i] = new Option(arrObj[i][1],aarrObj[i][0]);
3。判断是否有要清空的对象。
这个时候要注意,可以在Script中先定义一个全局变量,用来存储各个Select控件。
比如,
allSltObj = new array();
allSltObj[0]= document.forms[0].Study_class;
...
判断
如果level + 2 > allSltObj.length,什么也不做。
否则,
for ( i = level + 2 -1;i<allSltObj.length;i++ ){
清空allSltObj[i]中的Option对象。
}
[/code]
以上就是这个函数的核心部分,另,细节上,避免某些触发事件出问题,建议给每个Select控件都加上形如<option selected>请选择教材版本</option>之类的选项。
调用的时候,基本如下
整个页面被初期化的时候,调用这个函数,初始化第一个select控件,其他的不管。
第一个至第三个空间触发onChange事件的时候,调用这个方法。
传入的参数依次如下
sltObj:下一个select对象。
arrObj:对应的存储下一个select控件中的数据的数组。
sltIndex:当前控件被选择的value。
level:当前select控件的层次。
基本上就是这样的流程了,这个方法的缺点是,数据很多的时候,打开页面,会发现好多代码。
而且初期化会很慢。
优点是只在初始化请求服务器,其他时候不会请求服务器。
具体是否要用看你的业务的特点来定。