声明在前,本文仅供学习参考,可能会有一些错误,实现方法也并不是最好的,欢迎大家纠错!
本文用到的关键知识点有以下:
1.select.options.add(new Option(text,value)); //给select添加option选项
2.字典存数据以键值对形式{key:value},如data={'姓名':'张三','密码':'123456'},本案例用来存各省市区。
3.select标签的onchange属性,在元素值改变时触发事件。
详细步骤(完整代码在最下面):
一、准备好需要的数据字典,代码如下(本文只是作为示例,只列出部分省市),格式为{1:{1:[ ] }},即字典里面的元素还是字典,最里面那层是数组。
var arrData = {
江西省:{南昌市: ['青山湖区','经开区','东湖区','南昌县'],
吉安市: ['青原区','吉州区','吉安县','泰和县','新干县'],
赣州市: ['河源市','兴国县','yy县','xx县'],
宜春市: ['袁州区','万载县']},
湖南省:{邵阳市: ['邵阳县','1区','2区'],
长沙市: ['1区','2区','3区','4区'],
岳阳市: ['5区','6区','7区','8区','9区','10区']},
广东省:{广州市: ['11区','12区','13区'],
东莞市: ['厚街镇','14区','15区','16区','17区'],
中山市: ['18区','19区','20区','21区']},
江苏省:{苏州市: ['22区','23区','24区','25区','26区'],
徐州市: ['27镇','28区','29区','30区'],
镇江市: ['31区','32区','33区','34区']}
};
二、构建好HTML静态页面,代码如下(本文只是作为示例,只列出部分省市):
注意,为了接下来能够方便访问字典,把option里面的value属性的值全部和option的内容一样。
<span>省</span>
<select id="province" onchange="changeProvince()">
<option value="--请选择--">--请选择--</option>
</select>
<span>市</span>
<select id="city" onchange="changeCity()">
<option value="">--请选择--</option>
</select>
<span>区</span>
<select id="area" onchange="changeCity()">
<option value="">--请选择--</option>
</select>
三、通过document.getElementById()方法分别获取到三个select(省市区)结点:
var province = document.getElementById("province");
var city = document.getElementById("city");
var area = document.getElementById("area");
四、初始化省份的标签,即遍历arrData的key值,添加到下拉列表中:
window.onload = function(){
for(key in arrData){ // 初始化省份的标签,即遍历arrData的key值,添加到下拉列表中
province.options.add(new Option(key, key));
}
}
五、实现changeProvince()方法,当选择了某个省的时候,市那一栏要相应的改变:
function changeProvince(){
city.length = 1; //当重新选择某个省时,应该把市和区的option清空,因为默认栏是“--请选择--”,故把长度变为1.
area.length = 1; //同上
for(key in arrData[province.value])
//注意字典中key的用法,字典是以键值对{key:value}存储的。province.value就是选择的省,比如选了江西省,那么province.value就是江西省。
city.options.add(new Option(key, key)); //options.add(new Option(text,value));
}
六、实现changeCity()方法,原理同上:
function changeCity(){
area.length = 1; //当重新选择某个市时,应该把区的option清空,因为默认栏是“--请选择--”,故把长度变为1.
for(key in arrData[province.value][city.value]){
var a = arrData[province.value][city.value][key];
area.options.add(new Option(a, a));
}
}
效果图如下:
附完整代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>三级联动Demo</title>
</head>
<body>
<span>省</span>
<select id="province" onchange="changeProvince()">
<option value="--请选择--">--请选择--</option>
</select>
<span>市</span>
<select id="city" onchange="changeCity()">
<option value="">--请选择--</option>
</select>
<span>区</span>
<select id="area" onchange="changeCity()">
<option value="">--请选择--</option>
</select>
</body>
<script>
var arrData = {
江西省:{南昌市: ['青山湖区','经开区','东湖区','南昌县'],
吉安市: ['青原区','吉州区','吉安县','泰和县','新干县'],
赣州市: ['河源市','兴国县','yy县','xx县'],
宜春市: ['袁州区','万载县']},
湖南省:{邵阳市: ['邵阳县','1区','2区'],
长沙市: ['1区','2区','3区','4区'],
岳阳市: ['5区','6区','7区','8区','9区','10区']},
广东省:{广州市: ['11区','12区','13区'],
东莞市: ['厚街镇','14区','15区','16区','17区'],
中山市: ['18区','19区','20区','21区']},
江苏省:{苏州市: ['22区','23区','24区','25区','26区'],
徐州市: ['27镇','28区','29区','30区'],
镇江市: ['31区','32区','33区','34区']}
};
var province = document.getElementById("province");
var city = document.getElementById("city");
var area = document.getElementById("area");
window.onload = function(){
for(key in arrData){ // 初始化省份的标签,即遍历arrData的key值,添加到下拉列表中
province.options.add(new Option(key, key));
}
}
function changeProvince(){
city.length = 1; //当重新选择某个省时,应该把市和区的option清空,因为默认栏是“--请选择--”,故把长度变为1.
area.length = 1; //同上
for(key in arrData[province.value])
//注意字典中key的用法,字典是以键值对{key:value}存储的。province.value就是选择的省,比如选了江西省,那么province.value就是江西省。
city.options.add(new Option(key, key)); //options.add(new Option(text,value));
}
function changeCity(){
area.length = 1; //当重新选择某个市时,应该把区的option清空,因为默认栏是“--请选择--”,故把长度变为1.
for(key in arrData[province.value][city.value]){
var a = arrData[province.value][city.value][key];
area.options.add(new Option(a, a));
}
}
</script>
</html>