需求
- 通过三个下拉菜单实现省市区三级联动
- 第一级下拉菜单为省级
- 第二级下拉菜单为市级
- 第三级下拉菜单为区级
- 当点击第一季下拉菜单,第二级菜单内容会自动匹配
- 当取消上一级菜单选项时,次一级选项会自动消失
效果展示
下拉菜单
实现原理
给开始按钮绑定随机点名事件,停止按钮绑定随机点名的解除事件,通过给select添加change事件后再利用target可以得到精准的点击的元素的value值以辨别元素
利用swich语句分别罗列当点击不同value值的元素后,下一级对应出现的选项
代码
js部分
<script>
//将市与区县信息分装到不同数组,便于渲染
var guangdongs=["广州市","深圳市","珠海市","汕头市","佛山市","韶关市","河源市","梅州市","惠州市","汕尾市","东莞市","中山市","江门市","阳江市","湛江市","茂名市","肇庆市","清远市","揭阳市","潮州市","云浮市"]
var hainans=["海口市","三亚市","三沙市","儋州市"]
var guangxis=["南宁市","柳州市","桂林市","梧州市","北海市","崇左市","来宾市","贺州市","玉林市","百色市","河池市","钦州市","防城港市","贵港市"]
var jiangmens=["蓬江区","江海区","新会区","台山市","开平市","鹤山市","恩平市"]
var guangzhous=["越秀区","海珠区","荔湾区","天河区","白云区","黄埔区","花都区","番禺区","南沙区","从化区","增城区"]
var haikous=["秀英区","龙华区","琼山区","美兰区"]
var chongzuos=["江州区","凭祥市","扶绥县","宁明县","龙州县","大新县","天等县"]
//创建各城市与区的节点并将对应数组信息渲染到节点,并赋予value值
var clickGD=function(){
for(var i=0;i<guangdongs.length;i++){
var guangdong=document.createElement("option")
guangdong.innerHTML=`${guangdongs[i]}`
guangdong.value=i+1
$("#city").append(guangdong)
}
}
var clickHN=function(){
for(var i=0;i<hainans.length;i++){
var hainan=document.createElement("option")
hainan.innerHTML=hainans[i]
hainan.value=i+1
$("#city").append(hainan)
}
}
var clickGX=function(){
for(var i=0;i<guangxis.length;i++){
var guangxi=document.createElement("option")
guangxi.innerHTML=guangxis[i]
guangxi.value=i+1
$("#city").append(guangxi)
}
}
var clickJM=function(){
for(var i=0;i<jiangmens.length;i++){
var jiangmen=document.createElement("option")
jiangmen.innerHTML=jiangmens[i]
jiangmen.value=i+1
$("#area").append(jiangmen)
}
}
var clickGZ=function(){
for(var i=0;i<guangzhous.length;i++){
var guangzhou=document.createElement("option")
guangzhou.innerHTML=guangzhous[i]
guangzhou.value=i+1
$("#area").append(guangzhou)
}
}
var clickHK=function(){
for(var i=0;i<haikous.length;i++){
var haikou=document.createElement("option")
haikou.innerHTML=haikous[i]
haikou.value=i+1
$("#area").append(haikou)
}
}
var clickCZ=function(){
for(var i=0;i<chongzuos.length;i++){
var chongzuo=document.createElement("option")
chongzuo.innerHTML=chongzuos[i]
chongzuo.value=i+1
$("#area").append(chongzuo)
}
}
//设置选择省后下一级出现的市
$("#province").change(function(evt){
var val=evt.target.value
//当value值与case值相同,激发对应的点击事件函数
switch(val){
//取消选择的时候将下两级改回默认状态
case "0":
city.length=1
area.length=1
break
//在激发渲染下一级函数前清空前面点击后渲染的信息
case "1":
city.length=1
area.length=1
//渲染市的函数
clickGD()
//渲染区县的函数
choiceGD()
break
case "9":
city.length=1
area.length=1
clickHN()
choiceHN()
break
case "7":
city.length=1
area.length=1
clickGX()
choiceGX()
break
}
})
//设置选择市后下一级出现的区县,用函数包装,在点击了上一级对应省份后才调用此函数,避免相同value值在不同省份混乱
var choiceGD=function(){
$("#city").change(function(evt){
var val=evt.target.value
switch(val){
case "0":
area.length=1
break
case "1":
area.length=1
clickGZ()
break
case "13":
area.length=1
clickJM()
break
}
})
}
var choiceHN=function(){
$("#city").change(function(evt){
var val=evt.target.value
switch(val){
case "0":
area.length=1
break
case "1":
area.length=1
clickHK()
break
}
})
}
var choiceGX=function(){
$("#city").change(function(evt){
var val=evt.target.value
switch(val){
case "0":
area.length=1
break
case "6":
area.length=1
clickCZ()
break
}
})
}
</script>
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<style>
select{
width: 150px;
text-align: center;
}
</style>
</head>
<body>
请选择地区:
<select id="province">
<option selected value="0">请选择省份</option>
<option value="1">广东省</option>
<option value="2">安徽省</option>
<option value="3">北京</option>
<option value="4">重庆</option>
<option value="5">福建省</option>
<option value="6">甘肃省</option>
<option value="7">广西壮族自治区</option>
<option value="8">贵州省</option>
<option value="9">海南省</option>
<option value="10">河北省</option>
<option value="12">河南省</option>
<option value="13">黑龙江省</option>
<option value="14">湖北省</option>
<option value="15">湖南省</option>
<option value="16">吉林省</option>
<option value="17">江苏省</option>
<option value="18">辽宁省</option>
<option value="19">内蒙古自治区</option>
<option value="20">宁夏回族自治区</option>
<option value="21">青海省</option>
<option value="22">山东省</option>
<option value="23">山西省</option>
<option value="24">陕西省</option>
<option value="25">上海</option>
<option value="26">四川省</option>
<option value="27">天津</option>
<option value="28">西藏自治区</option>
<option value="29">新疆维吾尔自治区</option>
<option value="30">云南省</option>
<option value="31">浙江省</option>
<option value="32">江西省</option>
<option value="33">中国香港</option>
<option value="34">中国澳门</option>
<option value="35">中国台湾</option>
</select>
<select id="city">
<option selected value="0">请选择城市</option>
</select>
<select id="area">
<option selected value="0">请选择区县</option>
</select>
<script>
//将市与区县信息分装到不同数组,便于渲染
var guangdongs=["广州市","深圳市","珠海市","汕头市","佛山市","韶关市","河源市","梅州市","惠州市","汕尾市","东莞市","中山市","江门市","阳江市","湛江市","茂名市","肇庆市","清远市","揭阳市","潮州市","云浮市"]
var hainans=["海口市","三亚市","三沙市","儋州市"]
var guangxis=["南宁市","柳州市","桂林市","梧州市","北海市","崇左市","来宾市","贺州市","玉林市","百色市","河池市","钦州市","防城港市","贵港市"]
var jiangmens=["蓬江区","江海区","新会区","台山市","开平市","鹤山市","恩平市"]
var guangzhous=["越秀区","海珠区","荔湾区","天河区","白云区","黄埔区","花都区","番禺区","南沙区","从化区","增城区"]
var haikous=["秀英区","龙华区","琼山区","美兰区"]
var chongzuos=["江州区","凭祥市","扶绥县","宁明县","龙州县","大新县","天等县"]
//创建各城市与区的节点并将对应数组信息渲染到节点,并赋予value值
var clickGD=function(){
for(var i=0;i<guangdongs.length;i++){
var guangdong=document.createElement("option")
guangdong.innerHTML=`${guangdongs[i]}`
guangdong.value=i+1
$("#city").append(guangdong)
}
}
var clickHN=function(){
for(var i=0;i<hainans.length;i++){
var hainan=document.createElement("option")
hainan.innerHTML=hainans[i]
hainan.value=i+1
$("#city").append(hainan)
}
}
var clickGX=function(){
for(var i=0;i<guangxis.length;i++){
var guangxi=document.createElement("option")
guangxi.innerHTML=guangxis[i]
guangxi.value=i+1
$("#city").append(guangxi)
}
}
var clickJM=function(){
for(var i=0;i<jiangmens.length;i++){
var jiangmen=document.createElement("option")
jiangmen.innerHTML=jiangmens[i]
jiangmen.value=i+1
$("#area").append(jiangmen)
}
}
var clickGZ=function(){
for(var i=0;i<guangzhous.length;i++){
var guangzhou=document.createElement("option")
guangzhou.innerHTML=guangzhous[i]
guangzhou.value=i+1
$("#area").append(guangzhou)
}
}
var clickHK=function(){
for(var i=0;i<haikous.length;i++){
var haikou=document.createElement("option")
haikou.innerHTML=haikous[i]
haikou.value=i+1
$("#area").append(haikou)
}
}
var clickCZ=function(){
for(var i=0;i<chongzuos.length;i++){
var chongzuo=document.createElement("option")
chongzuo.innerHTML=chongzuos[i]
chongzuo.value=i+1
$("#area").append(chongzuo)
}
}
//设置选择省后下一级出现的市
$("#province").change(function(evt){
var val=evt.target.value
//当value值与case值相同,激发对应的点击事件函数
switch(val){
//取消选择的时候将下两级改回默认状态
case "0":
city.length=1
area.length=1
break
//在激发渲染下一级函数前清空前面点击后渲染的信息
case "1":
city.length=1
area.length=1
//渲染市的函数
clickGD()
//渲染区县的函数
choiceGD()
break
case "9":
city.length=1
area.length=1
clickHN()
choiceHN()
break
case "7":
city.length=1
area.length=1
clickGX()
choiceGX()
break
}
})
//设置选择市后下一级出现的区县,用函数包装,在点击了上一级对应省份后才调用此函数,避免相同value值在不同省份混乱
var choiceGD=function(){
$("#city").change(function(evt){
var val=evt.target.value
switch(val){
case "0":
area.length=1
break
case "1":
area.length=1
clickGZ()
break
case "13":
area.length=1
clickJM()
break
}
})
}
var choiceHN=function(){
$("#city").change(function(evt){
var val=evt.target.value
switch(val){
case "0":
area.length=1
break
case "1":
area.length=1
clickHK()
break
}
})
}
var choiceGX=function(){
$("#city").change(function(evt){
var val=evt.target.value
switch(val){
case "0":
area.length=1
break
case "6":
area.length=1
clickCZ()
break
}
})
}
</script>
</body>
</html>```