这段代码的联动效果很好,但是从select获得的值不是它在列表中显示的文本值,请熟悉的朋友帮帮忙
数据库结构 (具体的数据库文件可以从http://60.232.190.180/down/city.rar下载)
cities.mdb
province: P_ID P_NAME
city: C_ID C_NAME C_PID代码如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JS动态列表示例</title>
<script language="JavaScript"><!--
<%
dim conn,rs,grs,i,j,pstr,sstr
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
set grs=server.createobject("adodb.recordset")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("Cities.mdb")
'写省份JS数组
rs.open "select * from province;",conn,1,1
pstr="var pstr=new Array("
for i=0 to rs.recordcount-1
if i<>rs.recordcount-1 then
pstr=pstr & "'" & rs("p_name") & "',"
else
pstr=pstr & "'" & rs("p_name") & "'"
end if
getsub(rs("p_name"))
rs.movenext
next
pstr=pstr & ");"
response.write pstr & vbcrlf
rs.close()
set rs=nothing
set grs=nothing'根据省份写城市JS数组的过程
sub getsub(pname)
grs.open "select * from city where c_pid='" & pname & "';",conn,1,1
sstr="var sstr" & i & "=new Array("
for j=1 to grs.recordcount
if j<>grs.recordcount then
sstr=sstr & "'" & grs("c_name") & "',"
else
sstr=sstr & "'" & grs("c_name") & "'"
end if
grs.movenext
next
grs.close()
sstr=sstr & ");"
response.write sstr & vbcrlf
end sub
%>//添加列表项目
//参数说明:FrmName-表单名、sName-要添加的列表名、sText-列表项显示的文本、sValue-列表项的值
function addOption(FrmName, sName, sText, sValue) {
var def = true;
var sel = true;
var optionName = new Option(sText, sValue, def, sel);
var length = FrmName[sName].length;
FrmName[sName].options[length] = optionName;
FrmName[sName].options[length].selected = false;
}//删除列表项目
//参数说明:FrmName-表单名、sName-要删除的列表名、force-是否删除原来的项目(True删除,False保留)
function delOptions(FrmName, sName, force) {
var length = FrmName[sName].options.length;
for (var i=0; i<FrmName[sName].options.length; i++) {
if (FrmName[sName].options[i].selected || force) {
FrmName[sName].options[i] = null;
length--;
i--;
}
}
}//获得要添加列表项目的数组;
//参数说明:what-要获得选定值的列表
function getArrayValue(what) {
return eval(what.options[what.options.selectedIndex].value);
}//根据当前选定值,添加列表项目
//参数说明:FrmName-表单名、sName1-要获取选定值的列表名、sName2-要动态加载的列表名
function updateOptions(FrmName, sName1, sName2) {
delOptions(FrmName,sName2,true);
var ArrayValue=getArrayValue(FrmName[sName1]);
for (var i=0; i<ArrayValue.length;i+=1) {
addOption(FrmName,sName2,ArrayValue[i],'sstr'+i);
}
FrmName[sName2].options.selectedIndex =0;//设置默认显示的列表项目
}function GetValue(k){
alert(k);
}//--></script>
</head><body onLoad="updateOptions(frmdlist, 'lsti', 'lstb');updateOptions(frmdlist, 'lstb', 'lsts')">
<p> </p>
<p> </p>
<p> </p>
<form action="" method="post" name="frmdlist" id="frmdlist">
<table width="408" border="0" align="center" cellpadding="2" cellspacing="2">
<tr>
<td width="400">JS动态列表示例<select name="lsti" style="display:none"><option value="pstr">pstr</select></td>
</tr>
<tr>
<td><select style="width:200" name="lstb" id="lstb" onChange="updateOptions(this.form, 'lstb', 'lsts')">
</select>
<input type="button" name="Submit2" value="GetValue" onClick="GetValue(document.frmdlist.lstb.value)"></td>
</tr>
<tr>
<td><select style="width:200" name="lsts" id="lsts">
</select>
<input type="button" name="Submit" value="GetValue" onClick="GetValue(document.frmdlist.lsts.value)"></td>
</tr>
</table>
</form>
</body>
</html>
数据库结构 (具体的数据库文件可以从http://60.232.190.180/down/city.rar下载)
cities.mdb
province: P_ID P_NAME
city: C_ID C_NAME C_PID代码如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JS动态列表示例</title>
<script language="JavaScript"><!--
<%
dim conn,rs,grs,i,j,pstr,sstr
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
set grs=server.createobject("adodb.recordset")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("Cities.mdb")
'写省份JS数组
rs.open "select * from province;",conn,1,1
pstr="var pstr=new Array("
for i=0 to rs.recordcount-1
if i<>rs.recordcount-1 then
pstr=pstr & "'" & rs("p_name") & "',"
else
pstr=pstr & "'" & rs("p_name") & "'"
end if
getsub(rs("p_name"))
rs.movenext
next
pstr=pstr & ");"
response.write pstr & vbcrlf
rs.close()
set rs=nothing
set grs=nothing'根据省份写城市JS数组的过程
sub getsub(pname)
grs.open "select * from city where c_pid='" & pname & "';",conn,1,1
sstr="var sstr" & i & "=new Array("
for j=1 to grs.recordcount
if j<>grs.recordcount then
sstr=sstr & "'" & grs("c_name") & "',"
else
sstr=sstr & "'" & grs("c_name") & "'"
end if
grs.movenext
next
grs.close()
sstr=sstr & ");"
response.write sstr & vbcrlf
end sub
%>//添加列表项目
//参数说明:FrmName-表单名、sName-要添加的列表名、sText-列表项显示的文本、sValue-列表项的值
function addOption(FrmName, sName, sText, sValue) {
var def = true;
var sel = true;
var optionName = new Option(sText, sValue, def, sel);
var length = FrmName[sName].length;
FrmName[sName].options[length] = optionName;
FrmName[sName].options[length].selected = false;
}//删除列表项目
//参数说明:FrmName-表单名、sName-要删除的列表名、force-是否删除原来的项目(True删除,False保留)
function delOptions(FrmName, sName, force) {
var length = FrmName[sName].options.length;
for (var i=0; i<FrmName[sName].options.length; i++) {
if (FrmName[sName].options[i].selected || force) {
FrmName[sName].options[i] = null;
length--;
i--;
}
}
}//获得要添加列表项目的数组;
//参数说明:what-要获得选定值的列表
function getArrayValue(what) {
return eval(what.options[what.options.selectedIndex].value);
}//根据当前选定值,添加列表项目
//参数说明:FrmName-表单名、sName1-要获取选定值的列表名、sName2-要动态加载的列表名
function updateOptions(FrmName, sName1, sName2) {
delOptions(FrmName,sName2,true);
var ArrayValue=getArrayValue(FrmName[sName1]);
for (var i=0; i<ArrayValue.length;i+=1) {
addOption(FrmName,sName2,ArrayValue[i],'sstr'+i);
}
FrmName[sName2].options.selectedIndex =0;//设置默认显示的列表项目
}function GetValue(k){
alert(k);
}//--></script>
</head><body onLoad="updateOptions(frmdlist, 'lsti', 'lstb');updateOptions(frmdlist, 'lstb', 'lsts')">
<p> </p>
<p> </p>
<p> </p>
<form action="" method="post" name="frmdlist" id="frmdlist">
<table width="408" border="0" align="center" cellpadding="2" cellspacing="2">
<tr>
<td width="400">JS动态列表示例<select name="lsti" style="display:none"><option value="pstr">pstr</select></td>
</tr>
<tr>
<td><select style="width:200" name="lstb" id="lstb" onChange="updateOptions(this.form, 'lstb', 'lsts')">
</select>
<input type="button" name="Submit2" value="GetValue" onClick="GetValue(document.frmdlist.lstb.value)"></td>
</tr>
<tr>
<td><select style="width:200" name="lsts" id="lsts">
</select>
<input type="button" name="Submit" value="GetValue" onClick="GetValue(document.frmdlist.lsts.value)"></td>
</tr>
</table>
</form>
</body>
</html>
解决方案 »
- javascript中,null与""有什么区别,我感觉一样啊
- js如何修改css的属性 css写在单独的一个文件里面
- 如何用css改变背景图
- 请问如何调用父框架的一个javascript函数?
- 谁能解释一下这段可跨域代码每条代码的意思?(疯求)
- parentNode和parentElement怎么是一样的?
- 如何过滤发帖内容...求大神指教...
- How to highlight some text in an iframe by script?
- 怎样实现一段时间没有鼠标动作之后自动返回某一页面的功能
- 求助 ajax json已获取到了,但handsontable表单无数据显示
- 如何使用javascript或者vbscript获得client端的Windows Media Format Runtime版本信息?
- JS的window.open()方法
delOptions(FrmName,sName2,true);
var ArrayValue=getArrayValue(FrmName[sName1]);
for (var i=0; i<ArrayValue.length;i+=1) {
addOption(FrmName,sName2,ArrayValue[i],ArrayValue[i]);
}
FrmName[sName2].options.selectedIndex =0;//设置默认显示的列表项目
}
后两个参数就是text和value 要一样的话,就像上面
现在是只要改了'sstr'+i,就没有联动的效果
继续寻求答案
修改原来的
function GetValue(k){
alert(k);
}
修改后的为
function GetValue(FrmName, sName, n){
var ArrayValue=getArrayValue(FrmName[sName]);
return ArrayValue[n]
}
修改<input type="button" name="Submit2" value="GetValue" onClick="GetValue(document.frmdlist.lstb.value)">为 <input type="button" name="Submit2" value="GetValue" onClick="alert(GetValue(frmdlist,'lsti',document.frmdlist.lstb.options.selectedIndex))修改<input type="button" name="Submit" value="GetValue" onClick="GetValue(document.frmdlist.lsts.value)">为<input type="button" name="Submit" value="GetValue" onClick="alert(GetValue(frmdlist,'lstb',document.frmdlist.lsts.options.selectedIndex))">这样可以取得值了我是刚开始学javascript,很多地方还不明白,如果有朋友有更好的办法请不吝指教,谢谢