jQuery实现省市县三级联动菜单

使用JQuery实现的全国省市县三级联动菜单,没有使用ajax,数据也不是从数据库中动态读取出来的,就是简单的jquery,方便实用,实现效果如下图:

 

1、定义数据,我们可以将省、市、县定义为一个js文件中,分别为三个数组存放,下面是举例,所以只列出部分省、市、县,全国和海外全部数据见我的资源文件:省市县三级联动菜单完整项目中的provincesdata.js文件,资源下载地址:http://download.csdn.net/detail/harderxin/8311607

我们定义一个js文件,用来存放省市县数据:provincesdata.js

//定义省级数据,为一维数组
var GP =['安徽','澳门','北京']
//定义市级数据,为二维数组
var GT = [
	['合肥','安庆','蚌埠','亳州','巢湖','池州','滁州','阜阳','淮北','淮南','黄山','六安','马鞍山','宿州','铜陵','芜湖','宣城'],
	['澳门'],
	['昌平','朝阳','崇文','大兴','东城','房山','丰台','海淀','怀柔','门头沟','密云','平谷','石景山','顺义','通州','西城','宣武','延庆']
]
//定义县级数据,为三维数组
var GC =
[
	[
		['长丰','肥东','肥西','合肥市'],
		['安庆市','枞阳','怀宁','潜山','宿松','太湖','桐城','望江','岳西'],
		['蚌埠市','固镇','怀远','五河'],
		['亳州市','利辛','蒙城','涡阳'],
		['巢湖市','含山','和县','庐江','无为'],
		['池州市','东至','青阳','石台'],
		['滁州市','定远','凤阳','来安','明光','全椒','天长'],
		['阜南','阜阳市','界首','临泉','太和','颍上'],
		['淮北市','濉溪'],
		['凤台','淮南市'],
		['黄山市','祁门','歙县','休宁','黟县'],
		['霍邱','霍山','金寨','六安市','寿县','舒城'],
		['当涂','马鞍山市'],
		['砀山','灵璧','泗县','宿州市','萧县'],
		['铜陵市','铜陵县'],
		['繁昌','南陵','芜湖市','芜湖县'],
		['广德','绩溪','泾县','旌德','郎溪','宁国','宣城市']
	],
	[
		['澳门']
	],
	[
		['昌平'],
		['朝阳'],
		['崇文'],
		['大兴'],
		['东城'],
		['房山'],
		['丰台'],
		['海淀'],
		['怀柔'],
		['门头沟'],
		['密云'],
		['平谷'],
		['石景山'],
		['顺义'],
		['通州'],
		['西城'],
		['宣武'],
		['延庆']
	]
]

2、编写jquery城市联动插件:jquery.ProvinceCity.js文件

$.fn.ProvinceCity = function(){
	var _self = this;
	//定义3个默认值
	_self.data("province",["请选择", "请选择"]);
	_self.data("city1",["请选择", "请选择"]);
	_self.data("city2",["请选择", "请选择"]);
	//插入3个空的下拉框
	_self.append("<select></select>");
	_self.append("<select></select>");
	_self.append("<select></select>");
	//分别获取3个下拉框
	var $sel1 = _self.find("select").eq(0);
	var $sel2 = _self.find("select").eq(1);
	var $sel3 = _self.find("select").eq(2);
	//默认省级下拉
	if(_self.data("province")){
		$sel1.append("<option value='"+_self.data("province")[1]+"'>"+_self.data("province")[0]+"</option>");
	}
	$.each( GP , function(index,data){
		$sel1.append("<option value='"+data+"'>"+data+"</option>");
	});
	//默认的1级城市下拉
	if(_self.data("city1")){
		$sel2.append("<option value='"+_self.data("city1")[1]+"'>"+_self.data("city1")[0]+"</option>");
	}
	//默认的2级城市下拉
	if(_self.data("city2")){
		$sel3.append("<option value='"+_self.data("city2")[1]+"'>"+_self.data("city2")[0]+"</option>");
	}
	//省级联动 控制
	var index1 = "" ;
	$sel1.change(function(){
		//清空其它2个下拉框
		$sel2[0].options.length=0;
		$sel3[0].options.length=0;
		index1 = this.selectedIndex;
		if(index1==0){	//当选择的为 “请选择” 时
			if(_self.data("city1")){
				$sel2.append("<option value='"+_self.data("city1")[1]+"'>"+_self.data("city1")[0]+"</option>");
			}
			if(_self.data("city2")){
				$sel3.append("<option value='"+_self.data("city2")[1]+"'>"+_self.data("city2")[0]+"</option>");
			}
		}else{
			$.each( GT[index1-1] , function(index,data){
				$sel2.append("<option value='"+data+"'>"+data+"</option>");
			});
			$.each( GC[index1-1][0] , function(index,data){
				$sel3.append("<option value='"+data+"'>"+data+"</option>");
			})
		}
	}).change();
	//1级城市联动 控制
	var index2 = "" ;
	$sel2.change(function(){
		$sel3[0].options.length=0;
		index2 = this.selectedIndex;
		$.each( GC[index1-1][index2] , function(index,data){
			$sel3.append("<option value='"+data+"'>"+data+"</option>");
		})
	});
	return _self;
};

3、编写我们的测试页面,导入我们的省市县数据js:provincesdata.js和jquery联动插件js:jquery.ProvinceCity.js,还有一个很重要的jquery插件:jquery-1.6.min.js,定义一个div文件,引入我们的ProvinceCity方法即可:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <!--设置select样式-->
  <style>
	#test select{
		width:100px;
		margin-left:20px;
	}
  </style>
  <!--引入jquery插件-->
  <script src="jquery-1.6.min.js" type="text/javascript"></script>
  <!--引入我们编写的省市县jquery插件-->
  <script src="jquery.ProvinceCity.js" type="text/javascript"></script>
  <!--引入我们编写的js省市县基础数据-->
  <script src="provincesdata.js" type="text/javascript"></script>
  <script>
	//调用插件
	$(function(){
		$("#test").ProvinceCity();
	});
  </script>

 </head>

 <body>
  <div id="test"></div>
 </body>
</html>


查看html文件,即可看到效果,当我们项目需要用到的时候,我们可以把下面几个文件当做插件来使用,直接在项目中添加即可,如果需要相应的数据,在provincedata.js中进行相应的添加和修改即可,非常方便

 <!--引入jquery插件-->
  <script src="jquery-1.6.min.js" type="text/javascript"></script>
  <!--引入我们编写的省市县jquery插件-->
  <script src="jquery.ProvinceCity.js" type="text/javascript"></script>
  <!--引入我们编写的js省市县基础数据-->
  <script src="provincesdata.js" type="text/javascript"></script>
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 可以通过以下步骤实现: 1. 创建一个HTML页面,包含三个下拉框,分别用于选择省、市、。 2. 在页面中引入jQuery库和一个用于获取JSON数据的ajax函数。 3. 创建一个JSON文件,命名为area.json,其中包含省、市、数据。 4. 使用ajax函数获取area.json文件中的数据,并将数据填充到省、市、三个下拉框中。 5. 给省下拉框绑定一个change事件,当省下拉框的值改变时,根据省的值获取对应的市数据,并将市数据填充到市下拉框中。 6. 给市下拉框绑定一个change事件,当市下拉框的值改变时,根据市的值获取对应的数据,并将数据填充到下拉框中。 7. 最后,根据用户选择的省、市、的值,进行相应的操作。 以上就是使用ajax获取area.json数据实现省市三级联动选择的步骤。 ### 回答2: ajax 是一种基于 HTTP 请求异步传输数据的技术,可以用来获取后台返回的数据并动态显示在页面上,这样可以极大地提高用户的体验。本篇文章将介绍如何使用 ajax 获取 area.json 数据,并实现省市三级联动选择功能。 首先,我们需要准备一个 area.json 文件,该文件包含了省、市、三级的地域数据,如下所示: ```json { "provinceList": [ { "id": 110000, "name": "北京市", "cityList": [ { "id": 110100, "name": "北京市市辖区", "areaList": [ { "id": 110101, "name": "东城区" }, { "id": 110102, "name": "西城区" } ] } ] } ] } ``` 接下来,我们需要在 HTML 页面中添加三个下拉框,分别用于显示省、市、的选择结果,代码如下: ```html <div> <label>省份:</label> <select id="province"></select> </div> <div> <label>城市:</label> <select id="city"></select> </div> <div> <label>/区:</label> <select id="area"></select> </div> ``` 请注意,上述代码中给每个下拉框添加了一个 id 属性,这便于我们在 JavaScript 中访问这些元素。 接下来,我们需要编写 JavaScript 代码,使用 ajax 技术获取 area.json 文件并解析其中的数据,最终生成省市三级联动选择菜单。具体代码如下: ```javascript var province = document.getElementById("province"); var city = document.getElementById("city"); var area = document.getElementById("area"); // 使用 ajax 获取 area.json 文件 var xhr = new XMLHttpRequest(); xhr.open("GET", "area.json", true); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { // 解析 json 数据 var data = JSON.parse(xhr.responseText); var provinceList = data.provinceList; // 生成省份下拉菜单 for (var i = 0; i < provinceList.length; i++) { var option = document.createElement("option"); option.value = provinceList[i].id; option.innerHTML = provinceList[i].name; province.appendChild(option); } // 生成城市下拉菜单 province.onchange = function () { var provinceId = province.value; var cityList = null; for (var i = 0; i < provinceList.length; i++) { if (provinceList[i].id == provinceId) { cityList = provinceList[i].cityList; break; } } city.innerHTML = "<option value=''>请选择城市</option>"; area.innerHTML = "<option value=''>请选择/区</option>"; for (var i = 0; i < cityList.length; i++) { var option = document.createElement("option"); option.value = cityList[i].id; option.innerHTML = cityList[i].name; city.appendChild(option); } }; // 生成/区下拉菜单 city.onchange = function () { var cityId = city.value; var areaList = null; for (var i = 0; i < provinceList.length; i++) { var cityList = provinceList[i].cityList; for (var j = 0; j < cityList.length; j++) { if (cityList[j].id == cityId) { areaList = cityList[j].areaList; break; } } if (areaList != null) { break; } } area.innerHTML = "<option value=''>请选择/区</option>"; for (var i = 0; i < areaList.length; i++) { var option = document.createElement("option"); option.value = areaList[i].id; option.innerHTML = areaList[i].name; area.appendChild(option); } }; } }; xhr.send(); ``` 上述代码中,我们先定义了三个变量 province、city、area,它们分别用于缓存 HTML 页面中的省市下拉框元素。 然后,我们使用 XHR 对象发送 GET 请求,获取 area.json 文件中的数据。其中,onreadystatechange 事件用于在 readyState 和 status 发生变化时执行相应的回调函数。 当获取到数据时,我们解析 json 数据,并生成省份下拉菜单。同时,为省份下拉菜单注册一个 onchange 事件,用于生成城市下拉菜单。 在城市下拉菜单中同样注册 onchange 事件,用于生成/区下拉菜单。 最后,我们使用 createElement 方法生成选项元素,并使用 appendChild 方法添加到相应的下拉框中。 这样,我们就完成了使用 ajax 技术获取 area.json 数据,并实现省市三级联动选择功能的代码编写。 ### 回答3: 在前端开发中,省市三级联动选择是比较常见的功能,通过ajax获取area.json数据可以实现这一功能。下面分为三个步骤进行讲解。 一、获取数据 在前端中使用ajax获取数据是比较常见的做法。可以使用jQuery库提供的$.ajax方法,从服务器端获取数据。在获取area.json数据的过程中,需要设置数据数据类型为json。以下是一个获取数据的示例: $(document).ready(function(){ $.ajax({ url:"area.json", dataType:"json", success:function(data){ //处理数据 } }); }); 二、处理数据 获取到数据后,我们需要对其进行处理,在jquery中可以使用$.each()方法对数据进行循环遍历,然后将其添加到HTML元素中去。 $(document).ready(function(){ $.ajax({ url:"area.json", dataType:"json", success:function(data){ $.each(data,function(index,province){ //处理省份数据 $.each(province.city,function(index,city){ //处理城市数据 $.each(city.area,function(index,area){ //处理数据 }); }); }); } }); }); 三、显示数据 处理完数据后,最后一步就是将其显示在页面上了。可以通过jquery选择器选定需要显示数据的HTML元素,然后将数据添加到HTML中去。下面是一个简单的示例: $(document).ready(function(){ $.ajax({ url:"area.json", dataType:"json", success:function(data){ $.each(data,function(index,province){ //处理省份数据 var option=$('<option>'); option.attr('value',province.name); option.text(province.name); $('#province').append(option); $.each(province.city,function(index,city){ //处理城市数据 var option=$('<option>'); option.attr('value',city.name); option.text(city.name); $('#city').append(option); $.each(city.area,function(index,area){ //处理数据 var option=$('<option>'); option.attr('value',area); option.text(area); $('#area').append(option); }); }); }); } }); }); 通过以上的三个步骤,就可以实现省市三级联动选择的功能。当用户选择不同的省份时,就会根据省份的不同,加载不同的城市以及数据。这样的交互方式可以让用户更加直观地了解省市数据,也更加方便用户选择所需的城市或级。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值