经过两天苦战,总算用js+jsp搞定在同一个下拉框中,在不刷新页面的情况下,动态生成多级select选项
一、先确定需求及要达到的效果
要达到的效果如下图
[
]
为了便于各位的调试,
我将代码进行了简化,取数据部分我去掉了,各位可修改成自己用的数据
二、说明
现将该设计中,用到的主要技巧列在下面
1。将数据动态填入js的数组
用如下3句话实现
out.print("<script>");
out.print("selprov[330000] = new Array(new Option(@#@#,@#@#), new Option(@#..@#,@#goUp@#), new Option(@#杭州地区@#,@#330100@#), new Option(@#宁波地区@#,@#330200@#), new Option(@#温州地区@#,@#330300@#));");
out.print("</script>");
具体应用时,可以用循环,将数据不断的 out.print(", new Option(xxx,yyy)");添加进去
2.1。当选择了省份后,将地区信息填入地区列表
主要用了下面这个循环
for(var i=0; i<selprov[hprov.value].length; i++){
harea.add(selprov[hprov.value][i]);
}
2.2。当选择了地区后,将县市信息填入城市列表(实现方法同上)
4。用了隐含技巧,将3个select放入在同一行中的3个<td></td>中,
然后用<td style="display:none">进行隐藏,每次3个<td>中,只有一项是可见的
如:当需要地区显示时,用如下js语句
d2.style.display="";
d1.style.display="none";
d3.style.display="none";
三、源代码
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>city</title>
<script language="JavaScript">
var selprov = new Array();
var selarea = new Array();
</script>
<%
out.print("<script>");
//对每个省的数组添加地区数据
out.print("selprov[330000] = new Array(new Option(@#@#,@#@#), new Option(@#..@#,@#goUp@#), new Option(@#杭州地区@#,@#330100@#), new Option(@#宁波地区@#,@#330200@#), new Option(@#温州地区@#,@#330300@#));");
out.print("selprov[350000] = new Array(new Option(@#@#,@#@#), new Option(@#..@#,@#goUp@#), new Option(@#福州地区@#,@#350100@#), new Option(@#厦门地区@#,@#350200@#), new Option(@#泉州地区@#,@#350300@#));");
out.print("</script>");
out.print("<script>");
//对每个省每个地区的数组添加县市数据
out.print("selarea[330100] = new Array(new Option(@#@#,@#@#), new Option(@#..@#,@#goUp@#), new Option(@#杭州市@#,@#330101@#), new Option(@#萧山市@#,@#330102@#), new Option(@#余杭市@#,@#330102@#));");
out.print("selarea[330200] = new Array(new Option(@#@#,@#@#), new Option(@#..@#,@#goUp@#), new Option(@#宁波市@#,@#330201@#), new Option(@#余姚市@#,@#330202@#), new Option(@#奉化市@#,@#330203@#));");
out.print("selarea[350100] = new Array(new Option(@#@#,@#@#), new Option(@#..@#,@#goUp@#), new Option(@#福州市@#,@#350101@#), new Option(@#福清市@#,@#350102@#), new Option(@#福xx市@#,@#350102@#));");
out.print("</script>");
%>
<script>
</script>
<script>
function prov_chg()
{
with (document.all){
if(hprov.value) {
var ln = harea.options.length;
while(ln--) {
harea.options[ln] = null;
}
ln = hcity.options.length;
while(ln--) {
hcity.options[ln] = null;
}
for(var i=0; i<selprov[hprov.value].length; i++){
harea.add(selprov[hprov.value][i]);
}
}
}
if(document.form1.hprov.value != "")
{
d2.style.display="";
d1.style.display="none";
d3.style.display="none";
}
else {
}
}
function area_chg()
{
if(document.form1.harea.value == "goUp")
{
document.form1.hprov.value = "";
d1.style.display="";
d2.style.display="none";
d3.style.display="none";
} else if (document.form1.harea.value != "")
{
d1.style.display="none";
d2.style.display="none";
d3.style.display="";
}
with (document.all){
if(harea.value) {
var ln = hcity.options.length;
while(ln--) {
hcity.options[ln] = null;
}
for(var i=0; i<selarea[harea.value].length; i++){
hcity.add(selarea[harea.value][i]);
}
}
}
}
function city_chg() {
if (document.form1.hcity.value == "goUp")
{
d1.style.display="none";
d2.style.display="";
d3.style.display="none";
}
}
</script>
</head>
<body bgcolor="#ffffff">
<form name="form1" method="post" action="./city.jsp">
<table >
<tr> </tr>
<tr>
<td style="display:inline " id="d1"> 省份
<select id="hprov" onChange="javascipt:prov_chg();" >
<option value=""></option>
<%
out.print("<option value=@#330000@#>浙江省</option>");
out.print("<option value=@#350000@#>福建省</option>");
%>
</select> </td>
<td style="display:none " id="d2"> 地区
<select id="harea" onChange="javascipt:area_chg();" >
<option value=""></option>
</select> </td>
<td style="display:none " id="d3"> 县市
<select id="hcity" onChange="javascipt:city_chg();">
<option value=""></option>
</select> </td>
</tr>
</table>
</form>
</body>
</html>