一般级联有两种做法:
1. 把所有数据一次性全部取出放到客户端的JS里去.
2. 当用户选择了前一级时再到后台数据库里查询出后一级的内容.第一种方法我写了一个简单的例子:
<!-- 数据库结构 两个字段 provinceName(省名) cityName(城市名) -->
<!-- #include file="connection.asp" -->
<script language=javascript>
<%
dim RS
Set RS = Server.CreateObject("ADODB.Recordset")
RS.open "SELECT * FROM tableName ORDER BY provinceName DESC", Conn, 0, 1dim provinceName '省名
dim provinceList '记录所有的省名, 最后输出到JS里组成省名数组
dim cityList '记录某个省的所有城市名, 最后输出到JS里组成城市名数组
dim cityIndex 'JS的city数组名与省名下拉框的索引对应
cityIndex = 1 do while not RS.eof
if isEmpty(provinceName) then
cityList = cityList & chr(34) & Trim(RS("cityName")) & chr(34) &","
provinceName = Trim(RS("provinceName"))
else
if provinceName<>Trim(RS("provinceName")) then
provinceList = provinceList & chr(34) & provinceName & chr(34) &","
if not isEmpty(cityList) then Response.write "var city"& cityIndex &_
" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
'输出每个省所对应的城市名的列表并组成JS的数组, 数组形式参考下面的实例
cityIndex = cityIndex + 1
cityList = ""
end if
provinceName = Trim(RS("provinceName"))
cityList = cityList & chr(34) & Trim(RS("cityName")) & chr(34) &","
'将每个省里的所有城市名组成一串字串
end if
RS.movenext
loop if not isEmpty(cityList) then
Response.write "var city"& cityIndex &" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
end if
if not isEmpty(provinceName) then
provinceList = provinceList & chr(34) & provinceName & chr(34) &","
Response.write "var provinceName = ["& Left(provinceList, Len(provinceList)-1) &"];"
'输出省名字串并组成省名的JS数组, 形式见下实例
end if RS.close : Set RS=nothing
Conn.close : Set Conn=nothing
%>
</script><form name=form1>
<select name=province onchange="cityName(this.selectedIndex)">
<option value="">请选择省名</option>
</select><select name=city>
<option value="">请选择城名</option>
</select>
</form><script language=javascript>/* 若要直接看下拉框联动效果的话, 将这段被注释的代码起用, 且上面的那段ASP注释即可
var city1 = ["杭州", "宁波", "温州", "绍兴", "金华", "湖州"];
var city2 = ["南京", "苏州", "无锡", "常州", "镇江", "徐州"];
var city3 = ["合肥", "翕县", "黄山", "祁门", "休宁"];
var city4 = ["南昌", "九江", "赣州", "上饶", "新余", "景德镇"];
var provinceName = ["浙江", "江苏", "安徽", "江西"];
//你在ASP输出的页面里应该看到如上这般的JS数组, 能看到则表示成功
*/
function province()
{ var e = document.form1.province;
for (var i=0; i<provinceName.length; i++)
e.options.add(new Option(provinceName[i], provinceName[i]));
}
function cityName(n)
{
var e = document.form1.city;
for (var i=e.options.length; i>0; i--) e.remove(i);
if (n == 0) return;
var a = eval("city"+ n); //得到城市的数组名
for (var i=0; i<a.length; i++) e.options.add(new Option(a[i], a[i]));
}
function window.onload()
{
province(); //初始时给省名下拉框赋内容
}
</script>
1. 把所有数据一次性全部取出放到客户端的JS里去.
2. 当用户选择了前一级时再到后台数据库里查询出后一级的内容.第一种方法我写了一个简单的例子:
<!-- 数据库结构 两个字段 provinceName(省名) cityName(城市名) -->
<!-- #include file="connection.asp" -->
<script language=javascript>
<%
dim RS
Set RS = Server.CreateObject("ADODB.Recordset")
RS.open "SELECT * FROM tableName ORDER BY provinceName DESC", Conn, 0, 1dim provinceName '省名
dim provinceList '记录所有的省名, 最后输出到JS里组成省名数组
dim cityList '记录某个省的所有城市名, 最后输出到JS里组成城市名数组
dim cityIndex 'JS的city数组名与省名下拉框的索引对应
cityIndex = 1 do while not RS.eof
if isEmpty(provinceName) then
cityList = cityList & chr(34) & Trim(RS("cityName")) & chr(34) &","
provinceName = Trim(RS("provinceName"))
else
if provinceName<>Trim(RS("provinceName")) then
provinceList = provinceList & chr(34) & provinceName & chr(34) &","
if not isEmpty(cityList) then Response.write "var city"& cityIndex &_
" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
'输出每个省所对应的城市名的列表并组成JS的数组, 数组形式参考下面的实例
cityIndex = cityIndex + 1
cityList = ""
end if
provinceName = Trim(RS("provinceName"))
cityList = cityList & chr(34) & Trim(RS("cityName")) & chr(34) &","
'将每个省里的所有城市名组成一串字串
end if
RS.movenext
loop if not isEmpty(cityList) then
Response.write "var city"& cityIndex &" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
end if
if not isEmpty(provinceName) then
provinceList = provinceList & chr(34) & provinceName & chr(34) &","
Response.write "var provinceName = ["& Left(provinceList, Len(provinceList)-1) &"];"
'输出省名字串并组成省名的JS数组, 形式见下实例
end if RS.close : Set RS=nothing
Conn.close : Set Conn=nothing
%>
</script><form name=form1>
<select name=province onchange="cityName(this.selectedIndex)">
<option value="">请选择省名</option>
</select><select name=city>
<option value="">请选择城名</option>
</select>
</form><script language=javascript>/* 若要直接看下拉框联动效果的话, 将这段被注释的代码起用, 且上面的那段ASP注释即可
var city1 = ["杭州", "宁波", "温州", "绍兴", "金华", "湖州"];
var city2 = ["南京", "苏州", "无锡", "常州", "镇江", "徐州"];
var city3 = ["合肥", "翕县", "黄山", "祁门", "休宁"];
var city4 = ["南昌", "九江", "赣州", "上饶", "新余", "景德镇"];
var provinceName = ["浙江", "江苏", "安徽", "江西"];
//你在ASP输出的页面里应该看到如上这般的JS数组, 能看到则表示成功
*/
function province()
{ var e = document.form1.province;
for (var i=0; i<provinceName.length; i++)
e.options.add(new Option(provinceName[i], provinceName[i]));
}
function cityName(n)
{
var e = document.form1.city;
for (var i=e.options.length; i>0; i--) e.remove(i);
if (n == 0) return;
var a = eval("city"+ n); //得到城市的数组名
for (var i=0; i<a.length; i++) e.options.add(new Option(a[i], a[i]));
}
function window.onload()
{
province(); //初始时给省名下拉框赋内容
}
</script>
解决方案 »
- 熟悉jquery ui的进
- 唉,不得不来发问了,给我写段可以用的代码,时间间隔的,两个时间,有分时秒的
- 怎么对浮动菜单定位,再现等,最好有源码,谢谢
- 一个小问题,请大家找错。
- 表单提交(提交给本页面)后如何让页面显示在该表单所在处?在线等!
- 虚心请教个简单问题!怎样根据数据库读出的的代码(DM),匹配出代码意义(DMYY)?急!!!
- 怎样在JavaScript里得到文件的大小?急送分,谢!!!!
- jquery请教怎样在input[radio]单击时引发事件
- js中 ==”object“ 什么意思 小弟初学js
- 求一正则,替换字符串
- 页面提交后的remove option方法不能用!!急急
- 一个关于文本框输入内容全为数字的有效性的验证函数!!
我的表是
表 1: id1,name1
表 2: id2,name2,id1
我修改了你的程序,有报错,能看看吗???<!-- 数据库结构 两个字段 provinceName(省名) cityName(城市名) -->
<!-- #include file="connection.asp" -->
<script language=javascript>
<%dim RS
dim RS1
Set RS = Server.CreateObject("ADODB.Recordset")
RS.open "SELECT * FROM provin ORDER BY id DESC", Conn, 0, 1
Set RS1 = Server.CreateObject("ADODB.Recordset")
RS1.open "SELECT * FROM city ORDER BY id DESC", Conn, 0, 1dim provinceName '省名
dim provinceList '记录所有的省名, 最后输出到JS里组成省名数组
dim cityList '记录某个省的所有城市名, 最后输出到JS里组成城市名数组
dim cityIndex 'JS的city数组名与省名下拉框的索引对应
cityIndex = 1 do while not RS.eof
if (isEmpty(provinceName)) then
do while not rs1.eof
provinceName = Trim(RS("provinceName"))
if trim(rs("id"))=trim(rs1("provinid")) then
cityList = cityList & chr(34) & Trim(RS1("cityName")) & chr(34) &","
end if
RS1.movenext
loop
else
if (provinceName<>Trim(RS("provinceName"))) then
provinceList = provinceList & chr(34) & provinceName & chr(34) &","
provinceName = Trim(RS("provinceName"))
end if
do while not rs1.eof
if (Trim(RS("id"))=Trim(RS1("provinid"))) then
if not isEmpty(cityList) then Response.write "var city"& cityIndex &_
" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
'输出每个省所对应的城市名的列表并组成JS的数组, 数组形式参考下面的实例
cityIndex = cityIndex + 1
cityList = ""
end if
'
'
'end if
cityList = cityList & chr(34) & Trim(RS1("cityName")) & chr(34) &","
'将每个省里的所有城市名组成一串字串
RS1.movenext
loop
'end if
end if
RS.movenext
loop if not isEmpty(cityList) then
Response.write "var city"& cityIndex &" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
end if
if not isEmpty(provinceName) then
provinceList = provinceList & chr(34) & provinceName & chr(34) &","
Response.write "var provinceName = ["& Left(provinceList, Len(provinceList)-1) &"];"
'输出省名字串并组成省名的JS数组, 形式见下实例
end if RS.close : Set RS=nothing
Conn.close : Set Conn=nothing
%>
</script><form name=form1>
<select name=province onchange="cityName(this.selectedIndex)">
<option value="">请选择省名</option>
</select><select name=city>
<option value="">请选择城名</option>
</select>
</form><script language=javascript>
function province()
{ var e = document.form1.province;
for (var i=0; i<provinceName.length; i++)
e.options.add(new Option(provinceName[i], provinceName[i]));
}
function cityName(n)
{
var e = document.form1.city;
for (var i=e.options.length; i>0; i--) e.remove(i);
if (n == 0) return;
var a = eval("city"+ n); //得到城市的数组名
for (var i=0; i<a.length; i++) e.options.add(new Option(a[i], a[i]));
}
function window.onload()
{
province(); //初始时给省名下拉框赋内容
}
</script>
<!-- Begin
var arrItems1 = new Array();
var arrItemsGrp1 = new Array();arrItems1[3] = "Truck";
arrItemsGrp1[3] = 1;
arrItems1[4] = "Train";
arrItemsGrp1[4] = 1;
arrItems1[5] = "Car";
arrItemsGrp1[5] = 1;arrItems1[6] = "Boat";
arrItemsGrp1[6] = 2;
arrItems1[7] = "Submarine";
arrItemsGrp1[7] = 2;arrItems1[0] = "Planes";
arrItemsGrp1[0] = 3;
arrItems1[1] = "Ultralight";
arrItemsGrp1[1] = 3;
arrItems1[2] = "Glider";
arrItemsGrp1[2] = 3;var arrItems2 = new Array();
var arrItemsGrp2 = new Array();arrItems2[21] = "747";
arrItemsGrp2[21] = 0
arrItems2[22] = "Cessna";
arrItemsGrp2[22] = 0arrItems2[31] = "Kolb Flyer";
arrItemsGrp2[31] = 1
arrItems2[34] = "Kitfox";
arrItemsGrp2[34] = 1arrItems2[35] = "Schwietzer Glider";
arrItemsGrp2[35] = 2arrItems2[99] = "Chevy Malibu";
arrItemsGrp2[99] = 5
arrItems2[100] = "Lincoln LS";
arrItemsGrp2[100] = 5
arrItems2[57] = "BMW Z3";
arrItemsGrp2[57] = 5arrItems2[101] = "F-150";
arrItemsGrp2[101] = 3
arrItems2[102] = "Tahoe";
arrItemsGrp2[102] = 3arrItems2[103] = "Freight Train";
arrItemsGrp2[103] = 4
arrItems2[104] = "Passenger Train";
arrItemsGrp2[104] = 4arrItems2[105] = "Oil Tanker";
arrItemsGrp2[105] = 6
arrItems2[106] = "Fishing Boat";
arrItemsGrp2[106] = 6arrItems2[200] = "Los Angelas Class";
arrItemsGrp2[200] = 7
arrItems2[201] = "Kilo Class";
arrItemsGrp2[201] = 7
arrItems2[203] = "Seawolf Class";
arrItemsGrp2[203] = 7function selectChange(control, controlToPopulate, ItemArray, GroupArray)
{
var myEle ;
var x ;
// Empty the second drop down box of any choices
for (var q=controlToPopulate.options.length;q>=0;q--) controlToPopulate.options[q]=null;
if (control.name == "firstChoice") {
// Empty the third drop down box of any choices
for (var q=myChoices.thirdChoice.options.length;q>=0;q--) myChoices.thirdChoice.options[q] = null;
}
// ADD Default Choice - in case there are no values
myEle = document.createElement("option") ;
myEle.value = 0 ;
myEle.text = "[SELECT]" ;
controlToPopulate.add(myEle) ;
for ( x = 0 ; x < ItemArray.length ; x++ )
{
if ( GroupArray[x] == control.value )
{
myEle = document.createElement("option") ;
myEle.value = x ;
myEle.text = ItemArray[x] ;
controlToPopulate.add(myEle) ;
}
}
}
// End -->
</script>
<form name=myChoices>
<table align="center">
<tr>
<td>
<SELECT id=firstChoice name=firstChoice onchange="selectChange(this, myChoices.secondChoice, arrItems1, arrItemsGrp1);">
<option value=0 SELECTED>[SELECT]</option>
<option value=1>Land</option>
<option value=2>Sea</option>
<option value=3>Air</option>
</SELECT>
</TD><TD>
<SELECT id=secondChoice name=secondChoice onchange="selectChange(this, myChoices.thirdChoice, arrItems2, arrItemsGrp2);">
</SELECT>
<SELECT id=thirdChoice name=thirdChoice>
</SELECT>
</TD>
</TR>
</TABLE>
</form>
<script>
var cities=new Array();
cities[0]=new Array("changsha","changde","yueyang");
cities[1]=new Array("wuhan","huangshi","yichang");
cities[2]=new Array("guangzhou","shenzhen");
cities[3]=new Array("nanning","liuzhou");
function mysel()
{
document.all.city.options.length=0;
for(i=0;i<document.all.province.options.length;i++)
{
if(document.all.province.options[i].selected)
{
for(j=0;j<cities[i].length;j++)
{
document.all.city.options.length++;
document.all.city.options[document.all.city.options.length-1].value=cities[i][j];
document.all.city.options[document.all.city.options.length-1].text=cities[i][j];
}
}
}
}
</script>
choose province:
<select name=province multiple onchange=mysel()>
<option value=1>hunan
<option value=2>hubei
<option value=3>guangdong
<option value=4>guangxi
</select>
city:
<select name=city>
<option value=changsha>changsha
<option value=changde>changde
<option value=yueyang>yueyang
</select>