1. 程式人生 > >jQuery實現省市縣三級聯動選單

jQuery實現省市縣三級聯動選單

使用JQuery實現的全國省市縣三級聯動選單,沒有使用ajax,資料也不是從資料庫中動態讀取出來的,就是簡單的jquery,方便實用,實現效果如下圖:

1、定義資料,我們可以將省、市、縣定義為一個js檔案中,分別為三個陣列存放,下面是舉例,所以只列出部分省、市、縣,全國和海外全部資料見我的資原始檔:省市縣三級聯動選單完整專案中的

我們定義一個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>