87,997
社区成员




<html>
<head>
<title>三表二级联动菜单</title>
</head>
<body>
<p>
<select name="noa" id="a" onChange="">
<option value="" id="" selected>-请选择-</option>
<option value="aaba" id="a1">000a</option>
<option value="acba" id="ba">00ba</option>
<option value="safa" id="c3">0cba</option>
<option value="ahbc" id="bc">dcba</option>
</select>
<select name="nob" id="b" onChange="">
<option value="" id="" selected>-请选择-</option>
<option value="bbab" id="b1">000b</option>
<option value="cbec" id="c2">000c</option>
<option value="ddcc" id="f3">000d</option>
<option value="eeff" id="e4">000e</option>
<option value="fgff" id="f5">000f</option>
<option value="ggfg" id="g6">000g</option>
<option value="hhgg" id="d7">000h</option>
<option value="ifdb" id="i8">000i</option>
</select>
<br>
<br>
其中列表noa由数据库表A动态生成,<br>
列表nob由数据库表B动态生成,其中A表和B表由C表关联,C表有两个字段aID和bID,举例如下:<br>
aID bID<br>
------------------------------<br>
a1 b1<br>
a1 c2<br>
a1 f5<br>
a1 i8<br>
ba f3<br>
ba e4<br>
c3 d7<br>
bc g6<br>
bc f3<br>
bc c2<br>
—————————————————————————<br>
要求是:<br>
列表noa选择000a(a1)的时候,列表nob选项有且只有:-请选择-、000b、000c、000f、000i(b1、c2、f5、i8);<br>
列表noa选择00ba(ba)的时候,列表nob选项有且只有:-请选择-、000d、000e(f3、e4);<br>
列表noa选择0cba(c3)的时候,列表nob选项有且只有:-请选择-、000h(d7);<br>
列表noa选择dcba(bc)的时候,列表nob选项有且只有:-请选择-、000g、000d、000c(g6、f3、c2);<br>
</p>
<p>(括号内为表C关联的id值)</p>
</body>
</html>
<%
DIM conn,connstr,dbFileName
DIM rs
DIM sql
dbFileName = "dbfile.mdb"
SET conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(dbFileName)
conn.Open connstr
SET rs=server.createobject("adodb.recordset")
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test select</title>
<script type="text/javascript">
var origBList = {<%
'生成B表的脚本数据
sql = "select * from [B]"
rs.open sql,conn,1,1
IF rs.bof AND rs.eof THEN
' Do some thing
ELSE
Response.Write """" & rs("BID") & """:""" & rs("Bname") & """"
rs.movenext
DO WHILE NOT rs.eof
Response.Write ",""" & rs("BID") & """:""" & rs("Bname") & """"
rs.movenext
loop
END IF
rs.close
%>};
var origMap = new Array(<%
'生成 C 表的原始映射数据
sql = "select * from [C]"
rs.open sql,conn,1,1
IF rs.bof AND rs.eof THEN
' Do some thing
ELSE
Response.Write "{""" & rs("AID") & """:""" & rs("BID") & """}"
rs.movenext
DO WHILE NOT rs.eof
Response.Write ",{""" & rs("AID") & """:""" & rs("BID") & """}"
rs.movenext
loop
END IF
rs.close
%>);
var mapData;
// 在浏览器端,根据原始的数据生成实用的映射数据
function initMapData(){
var item, itemID, itemName;
mapData = new Object();
for(item in origMap){
for(itemID in origMap[item]){
if(mapData[itemID] == undefined){ mapData[itemID] = new Array(); }
mapData[itemID].push(origMap[item][itemID]);
}
}
}
initMapData();
function clearChildNodes(elem){
while(elem && elem.hasChildNodes()){
elem.removeChild(elem.firstChild);
}
}
function dosomething(event){
var evt = event || window.event;
var srcElem = evt.target || evt.srcElement;
var srcId = srcElem.value;
var listElem = document.getElementById("blist");
var optElem;
var textElem;
var listItems = mapData[srcId];
var item;
if( srcElem && listElem && mapData[srcId]){
clearChildNodes(listElem);
optElem = document.createElement("option");
textElem = document.createTextNode("--请选择--");
optElem.appendChild(textElem);
optElem.setAttribute("value","");
listElem.appendChild(optElem);
for(item in listItems){
optElem = document.createElement("option");
textElem = document.createTextNode(origBList[listItems[item]]);
optElem.appendChild(textElem);
optElem.setAttribute("value",listItems[item]);
listElem.appendChild(optElem);
}
}
}
</script>
</head>
<body>
<div>
<select name="noa" id="alist" onchange="dosomething(event)">
<option value="" selected>-请选择-</option><%
'生成 A 表的选择列表
sql = "select * from [A]"
rs.open sql,conn,1,1
IF rs.bof AND rs.eof THEN
' Do some thing
ELSE
DO WHILE NOT rs.eof %>
<option value="<%=rs("AID")%>"> <%=rs("AName")%> </option><%
rs.movenext
loop
END IF
rs.close
%>
<option value="a1">000a</option>
<option value="a2">00ba</option>
<option value="a3">0cba</option>
<option value="a4">dcba</option>
</select>
<select name="nob" id="blist" onchange="">
<option value="" selected>-请选择-</option>
</select> </div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test select</title>
<style type="text/css">
div {margin:2px;}
body>div {margin:8px; padding:4px; border:solid 2px #e0e0e0;}
</style>
<script type="text/javascript">
var itemMap = {
"a1":{
"" : {value:"",text:"-- 请选择 --"},
"b1" : {value:"bbab",text:"000b"},
"c2" : {value:"cbec",text:"000c"},
"f5" : {value:"fgff",text:"000f"},
"i8" : {value:"ifdb",text:"000i"}
},
"ba":{
"" : {value:"",text:"-- 请选择 --"},
"f3" : {value:"ddcc",text:"000d"},
"e4" : {value:"eeff",text:"000e"}
},
"c3":{
"" : {value:"",text:"-- 请选择 --"},
"d7" : {value:"ffgg",text:"000h"}
},
"bc":{
"" : {value:"",text:"-- 请选择 --"},
"g6" : {value:"ggfg",text:"000g"},
"f3" : {value:"ddcc",text:"000d"},
"c2" : {value:"cbec",text:"000c"}
}
};
function clearChildNodes(elem){
while(elem && elem.hasChildNodes()){
elem.removeChild(elem.firstChild);
}
}
function doSomeThing(event){
var evt = event || window.event;
var srcElem = evt.target || evt.srcElement;
var srcId = srcElem.options[srcElem.selectedIndex].id;
var listElem = document.getElementById("blist");
var optElem;
var textElem;
var listItems = itemMap[srcId];
var item;
if( srcElem && listElem && itemMap[srcId]){
clearChildNodes(listElem);
for(item in listItems){
optElem = document.createElement("option");
textElem = document.createTextNode(listItems[item].text);
optElem.appendChild(textElem);
optElem.setAttribute("value",listItems[item].value);
optElem.setAttribute("id",item);
listElem.appendChild(optElem);
}
}
}
</script>
</head>
<body>
<div>
<div>这是你要的结果</div>
<div>但是一定要这样子吗? option 加上 ID 感觉怪怪的……</div>
<select name="noa" id="alist" onchange="doSomeThing(event)">
<option value="" selected>-请选择-</option>
<option value="aaba" id="a1">000a</option>
<option value="acba" id="ba">00ba</option>
<option value="safa" id="c3">0cba</option>
<option value="ahbc" id="bc">dcba</option>
</select>
<select name="nob" id="blist" onchange="">
<option value="" selected>-请选择-</option>
</select>
</div>
<div>
<div>这样行不行?</div>
<select onchange="doOtherThing(event)">
<option value="" selected>--请选择--</option>
<optgroup label="000a">
<option value="aaba,bbab"> 000b </option>
<option value="aaba,cbec"> 000c </option>
<option value="aaba,fgff"> 000f </option>
<option value="aaba,ifdb"> 000i </option>
</optgroup>
<optgroup label="00ba">
<option value="acba,ddcc"> 000d </option>
<option value="acba,eeff"> 000e </option>
</optgroup>
<optgroup label="0cba">
<option value="safa,ffgg"> 000h </option>
</optgroup>
<optgroup label="dcba">
<option value="ahbc,ggfg"> 000g </option>
<option value="ahbc,ddcc"> 000d </option>
<option value="ahbc,cbec"> 000c </option>
</optgroup>
</div>
</body>
</html>