JS实现三级联动菜单「附思路说明」

1.前言

三级联动菜单是web开发中常用的表单元素之一,实现用户在三级联动菜单中选择相应的地区信息。本篇文章将使用JavaScript实现三级联动菜单,并对代码逻辑进行详细解析。

2.HTML结构

2.1.基本HTML结构

先来看一下三级联动菜单的基本HTML结构:

<select id="province">

<option value="">请选择省份</option>

</select>

<select id="city">

<option value="">请选择城市</option>

</select>

<select id="district">

<option value="">请选择区县</option>

</select>

三级联动菜单由三个<select>标签组成,分别用来选择省份、城市和区县信息。

2.2.动态生成HTML结构

为了实现三级联动菜单的动态生成,我们需要在JavaScript中通过遍历数据来生成对应的<select>标签

function createOption(obj,element)

{

for(var i in obj)

{

var opt=document.createElement("option");

opt.text=obj[i].name;

opt.value=obj[i].code;

element.add(opt);

}

}

createOption函数接收两个参数,第一个是包含省份、城市和区县信息的数组,第二个是要生成<option>标签的<select>元素。

3.数据结构

3.1.JSON格式

在三级联动菜单中,我们需要使用省份、城市和区县的名称和代码信息。为了方便使用,我们将这些数据放在一个JSON对象中:

var data={

"province":[

{

"name":"北京市",

"code":"110000",

"city":[

{

"name":"市辖区",

"code":"110100",

"district":[

{"name":"东城区","code":"110101"},

{"name":"西城区","code":"110102"},

{"name":"崇文区","code":"110103"},

//省略部分代码

]

},

{

"name":"县",

"code":"110200",

"district":[

{"name":"密云县","code":"110228"},

{"name":"延庆县","code":"110229"}

]

}

]

},

//省略部分代码

]

};

数据中包含三个属性:province(省份信息)、city(城市信息)和district(区县信息),通过这些数据,我们可以构建三级联动菜单。

3.2.获取区域信息编码

在三级联动菜单中,数据源信息仅仅是省份、城市和区县的名称和代码信息,最终用户选择的是区域信息编码(如北京市市辖区东城区的区域信息编码为110101)。在实现三级联动菜单前,我们需要先获取区域信息编码。

function getAreaCode(province,city,district)

{

for(var i in data.province)

{

if(data.province[i].name==province)

{

for(var j in data.province[i].city)

{

if(data.province[i].city[j].name==city)

{

for(var k in data.province[i].city[j].district)

{

if(data.province[i].city[j].district[k].name==district)

{

return data.province[i].city[j].district[k].code;

}

}

}

}

}

}

}

getAreaCode函数接收三个参数,分别是省份、城市和区县信息,通过遍历data中的数据来查找对应的区域信息编码。

4.逻辑实现

4.1.省份信息加载

当页面加载完成时,我们需要先将省份信息加载进页面中:

//页面加载完成时,加载省份信息

window.onload=function()

{

var province=document.getElementById("province");

createOption(data.province,province);

};

当页面加载后,我们将省份信息加载进<select>标签的option中,通过createOption函数循环读取省份信息,然后逐个生成对应的<option>标签。

4.2.选择省份信息

当用户选择省份信息时,我们需要根据省份名称来生成对应的城市信息:

//省份信息改变时,加载对应的城市信息

var province=document.getElementById("province");

province.onchange=function()

{

var provinceName=this.value;

var city=document.getElementById("city");

var district=document.getElementById("district");

//清空城市和区县信息

city[xss_clean]="<option value=''>请选择城市</option>";

district[xss_clean]="<option value=''>请选择区县</option>";

//生成城市信息

createOption(data.province[provinceName].city,city);

};

当用户选择省份信息时,我们先获取省份信息的名称,然后根据名称遍历data中的数据,找到对应的城市信息并生成对应的选项。

4.3.选择城市信息

当用户选择城市信息时,我们需要根据城市名称来生成对应的区县信息:

//城市信息改变时,加载对应的区县信息

var city=document.getElementById("city");

city.onchange=function()

{

var cityName=this.value;

var district=document.getElementById("district");

//清空区县信息

district[xss_clean]="<option value=''>请选择区县</option>";

//生成区县信息

createOption(data.province[provinceName].city[cityName].district,district);

};

当用户选择城市信息时,我们先获取城市信息的名称,然后根据名称遍历data中的数据,找到对应的区县信息并生成对应的选项。

4.4.选择区县信息

当用户选择区县信息时,我们需要根据省份、城市和区县信息生成对应的区域信息编码:

//区县信息改变时,获取对应的区域信息编码

var district=document.getElementById("district");

district.onchange=function()

{

var provinceName=document.getElementById("province").value;

var cityName=document.getElementById("city").value;

var districtName=this.value;

var code=getAreaCode(provinceName,cityName,districtName);

alert(code);

};

当用户选择区县信息时,我们先获取用户选择的省份、城市和区县信息,然后通过getAreaCode函数获取对应的区域信息编码。

5.总结

本篇文章介绍了通过JavaScript实现三级联动菜单的方法。我们先通过遍历data中的数据来生成对应省份、城市和区县的<option>选项,然后根据用户选择的省份、城市和区县信息来生成对应的<option>选项,最终通过区县信息来获取对应的区域信息编码。

三级联动菜单虽然实现起来稍微复杂一点,但是通过掌握本文所介绍的方法,相信您也能够轻松实现三级联动菜单的功能。