20
2015
08

省市县镇村5级联动

实现省市县镇村5级联动。

效果如下:

获得 Adobe Flash Player

服务器比较渣,所以每次请求服务器需要的时间比较长。

数据来源于之前的一篇文章:全国各省、市、县、镇、村的mysql数据库和JSON格式数据

as源码:

package  {
	
	import fl.controls.ComboBox;
	import fl.data.DataProvider;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLRequestMethod;
	import flash.text.TextField;
	
	
	public class Main extends MovieClip {
		
		public var province:ComboBox;
		public var city:ComboBox;
		public var county:ComboBox;
		public var town:ComboBox;
		public var village:ComboBox;
		public var tf:TextField;
		public var loading:MovieClip;
		
		private var baseUrl:String = "http://hanyeah.com/api/villages/read.php";
		public function Main() {
			// constructor code
			loading.visible = false;
			province.addEventListener(Event.CHANGE, provinceChange);
			city.addEventListener(Event.CHANGE, cityChange);
			county.addEventListener(Event.CHANGE, countyChange);
			town.addEventListener(Event.CHANGE, townChange);
			village.addEventListener(Event.CHANGE, villageChange);
			
			province.labelField = "name";
			city.labelField = "name";
			county.labelField = "name";
			town.labelField = "name";
			village.labelField = "name";
			
			province.prompt = "省";
			city.prompt = "市";
			county.prompt = "县(区)";
			town.prompt = "镇(乡)";
			village.prompt = "村(街道)";
			
			loadJson("china.json", provinceLoaded);
			
			
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
		
		private function enterFrameHandler(e:Event):void 
		{
			updateText();
			
		}
		//--------
		/**
		 * 省数据加载完成
		 * @param	json
		 */
		private function provinceLoaded(json:Object):void {
			province.dataProvider = json2dataProvider(json);
		}
		/**
		 * 选择的省改变
		 * @param	e
		 */
		private function provinceChange(e:Event):void 
		{
			city.dataProvider = new DataProvider([]);
			county.dataProvider = new DataProvider([]);
			town.dataProvider = new DataProvider([]);
			village.dataProvider = new DataProvider([]);
			//trace(province.selectedItem);
			loadJson("china/"+province.selectedItem.id+".json", cityLoaded);
		}
		//--------
		/**
		 * 市数据加载完成
		 * @param	json
		 */
		private function cityLoaded(json:Object):void {
			city.dataProvider = json2dataProvider(json);
		}
		/**
		 * 选择的市改变
		 * @param	e
		 */
		private function cityChange(e:Event):void 
		{
			county.dataProvider = new DataProvider([]);
			town.dataProvider = new DataProvider([]);
			village.dataProvider = new DataProvider([]);
			//trace(city.selectedItem);
			loadJson("china/"+province.selectedItem.id+"/"+city.selectedItem.id+".json", countyLoaded);
		}
		
		//--------
		/**
		 * 县数据加载完成
		 * @param	json
		 */
		private function countyLoaded(json:Object):void {
			county.dataProvider = json2dataProvider(json);
		}
		/**
		 * 选择的县改变
		 * @param	e
		 */
		private function countyChange(e:Event):void 
		{
			town.dataProvider = new DataProvider([]);
			village.dataProvider = new DataProvider([]);
			//trace(county.selectedItem);
			loadJson("china/"+province.selectedItem.id+"/"+city.selectedItem.id+"/"+county.selectedItem.id+".json", townLoaded);
		}
		//--------
		/**
		 * 镇数据加载完成
		 * @param	json
		 */
		private function townLoaded(json:Object):void {
			town.dataProvider = json2dataProvider(json);
		}
		/**
		 * 选择的镇改变
		 * @param	e
		 */
		private function townChange(e:Event):void 
		{
			village.dataProvider = new DataProvider([]);
			//trace(town.selectedItem);
			loadJson("china/" + province.selectedItem.id + "/" + city.selectedItem.id + "/" + county.selectedItem.id + "/" + town.selectedItem.id + ".json", villageLoaded);
		}
		//--------
		/**
		 * 村数据加载完成
		 * @param	json
		 */
		private function villageLoaded(json:Object):void {
			village.dataProvider = json2dataProvider(json);
		}
		/**
		 * 选择的村改变
		 * @param	e
		 */
		private function villageChange(e:Event):void 
		{
			//trace(village.selectedItem);
		}
		
		private function updateText():void {
			tf.text = (province.selectedLabel||"") + (city.selectedLabel||"") + (county.selectedLabel||"") + (town.selectedLabel||"") + (village.selectedLabel||"");
		}
		//----------------------工具-------------------------------
		/**
		 * 加载的json数据转换成DataProvider
		 * @param	json
		 * @return
		 */
		private function json2dataProvider(json:Object):DataProvider {
			var arr:Array = [];
			for (var key:String in json) {
				arr.push({"name":json[key],"id":key});
			}
			var data:DataProvider = new DataProvider(arr);
			data.sortOn("id", Array.NUMERIC);//排序
			return data;
		}
		/**
		 * 加载json数据
		 * @param	url
		 * @param	callback
		 */
		private function loadJson(url:String, callback:Function):void {
			loading.visible = true;
			var uld:URLLoader = new URLLoader();
			uld.addEventListener(Event.COMPLETE, onLoaded);
			var req:URLRequest = new URLRequest(baseUrl +"?location=" + url.replace(/\//g, ",")+"&a="+(new Date().getTime()));
			req.method = URLRequestMethod.GET;
			uld.load(req);
			function onLoaded(e:Event):void {
				uld.removeEventListener(Event.COMPLETE, onLoaded);
				callback(JSON.parse(uld.data.toString()));
				uld = null;
				loading.visible = false;
			}
		}
		
		//end
	}
	
}

源码打包下载

« 上一篇下一篇 »

相关文章:

闪电效果  (2017-11-28 15:4:19)

线段与椭圆的交点  (2017-1-6 14:43:41)

as3录制swf并保存flv视频  (2016-12-28 8:43:41)

解九连环  (2016-12-1 20:58:11)

as3实现setTimeout和trace  (2016-11-10 16:47:37)

registerCursor注册系统光标  (2016-9-14 9:49:40)

鼠标光标管理  (2016-9-13 17:44:3)

变形框(transform)实现  (2016-9-13 16:56:6)

flash文本消除锯齿不显示  (2016-8-25 11:43:31)

greenSock的easing曲线  (2016-8-24 18:30:11)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。