TaiwanZipCode郵遞區號的作法大同小異,比較常用的像是台灣郵遞區號外掛 / Taiwan Zip Code Plugin of jQuery就很簡單也很好用,可控制性也很高。
Taiwan ZipCode作法其實不難,只是因應各種不同framework可能有所調整,主要都是由二個ComboBox組成,當選取縣市別後,會取得鄉鎮別,觸發點只有一個。
執行畫面如下
這個範例主要提供可變的參數有:
/*
CityId : CityCombo的Id
AreaId : AreaCombo的Id
CityName : CityCombo的form使用的name,操作用
CityHiddenName : CityCombo的form使用實際傳送出去的name ex. cityCode=123&areaCode=456
AreaName : AreaCombo的form使用的name,操作用
AreaHiddenName : AreaCombo的form使用實際傳送出去的name ex. cityCode=123&areaCode=456
CityEmptyText : 無值時CityCombo所要顯示的提示字
AreaEmptyText : 無值時CityCombo所要顯示的提示字
*/
程式碼主要內容TaiwanZipCode:
/* * 本著作係依據創用 CC 姓名標示-相同方式分享 2.5 台灣 授權條款進行授權。 * 如欲瀏覽本授權條款之副本,請造訪 http://creativecommons.org/licenses/by-sa/2.5/tw/ * * This work is licensed under the Creative Commons Attribution-Share Alike 2.5 Taiwan License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/2.5/tw/ * * ExtJS 3.2.1台灣郵遞區號外掛 / Taiwan Zip Code Plugin of ExtJS 3.2.1 * http://blog.yslifes.com/ExtJSTaiwanZipCode/ * * version 1.0: * 2010/11/15 18::00:00 GMT * * Power by yku */ Ext.ns('Ext.plugin'); Ext.BLANK_IMAGE_URL = 'ext-3.2.1/resources/images/default/s.gif'; Ext.plugin.TaiwaZipCode = Ext.extend(Ext.Panel, { CityId : Ext.id(), AreaId : Ext.id(), CityName : 'cityName', CityHiddenName : 'cityCode', AreaName : 'areaName', AreaHiddenName : 'areaCode', CityEmptyText : '縣市', AreaEmptyText : '鄉鎮', cityCode : [["台北市", -1], ["基隆市", -2], ["台北縣", -3], ["宜蘭縣", -4], ["新竹縣", -6], ["桃園縣", -7], ["苗栗縣", -8], ["台中市", -9], ["台中縣", -10], ["彰化縣", -11], ["南投縣", -12], ["嘉義縣", -14], ["雲林縣", -15], ["台南市", -16], ["台南縣", -17], ["高雄市", -18], ["高雄縣", -19], ["澎湖縣", -20], ["屏東縣", -21], ["台東縣", -22], ["花蓮縣", -23], ["金門縣", -24], ["連江縣", -25], ["南海諸島", -26]], areaCode : [["中正區", "100", "-1"], ["大同區", "103", "-1"], ["中山區", "104", "-1"], ["松山區", "105", "-1"], ["大安區", "106", "-1"], ["萬華區", "108", "-1"], ["信義區", "110", "-1"], ["士林區", "111", "-1"], ["北投區", "112", "-1"], ["內湖區", "114", "-1"], ["南港區", "115", "-1"], ["文山區", "116", "-1"], ["仁愛區", "200", "-2"], ["信義區", "201", "-2"], ["中正區", "202", "-2"], ["中山區", "203", "-2"], ["安樂區", "204", "-2"], ["暖暖區", "205", "-2"], ["七堵區", "206", "-2"], ["萬里鄉", "207", "-3"], ["金山鄉", "208", "-3"], ["南竿鄉", "209", "-25"], ["北竿鄉", "210", "-25"], ["莒光鄉", "211", "-25"], ["東引鄉", "212", "-25"], ["板橋市", "220", "-3"], ["汐止市", "221", "-3"], ["深坑鄉", "222", "-3"], ["石碇鄉", "223", "-3"], ["瑞芳鎮", "224", "-3"], ["平溪鄉", "226", "-3"], ["雙溪鄉", "227", "-3"], ["貢寮鄉", "228", "-3"], ["新店市", "231", "-3"], ["坪林鄉", "232", "-3"], ["烏來鄉", "233", "-3"], ["永和市", "234", "-3"], ["中和市", "235", "-3"], ["土城市", "236", "-3"], ["三峽鎮", "237", "-3"], ["樹林市", "238", "-3"], ["鶯歌鎮", "239", "-3"], ["三重市", "241", "-3"], ["新莊市", "242", "-3"], ["泰山鄉", "243", "-3"], ["林口鄉", "244", "-3"], ["蘆洲市", "247", "-3"], ["五股鄉", "248", "-3"], ["八里鄉", "249", "-3"], ["淡水鎮", "251", "-3"], ["三芝鄉", "252", "-3"], ["石門鄉", "253", "-3"], ["宜蘭市", "260", "-4"], ["頭城鎮", "261", "-4"], ["礁溪鄉", "262", "-4"], ["壯圍鄉", "263", "-4"], ["員山鄉", "264", "-4"], ["羅東鎮", "265", "-4"], ["三星鄉", "266", "-4"], ["大同鄉", "267", "-4"], ["五結鄉", "268", "-4"], ["冬山鄉", "269", "-4"], ["蘇澳鎮", "270", "-4"], ["南澳鄉", "272", "-4"], ["台列嶼", "290", "-27"], ["新竹市", "300", "-5"], ["竹北市", "302", "-6"], ["湖口鄉", "303", "-6"], ["新豐鄉", "304", "-6"], ["新埔鎮", "305", "-6"], ["關西鎮", "306", "-6"], ["芎林鄉", "307", "-6"], ["寶山鄉", "308", "-6"], ["竹東鎮", "310", "-6"], ["五峰鄉", "311", "-6"], ["橫山鄉", "312", "-6"], ["尖石鄉", "313", "-6"], ["北埔鄉", "314", "-6"], ["峨眉鄉", "315", "-6"], ["中壢市", "320", "-7"], ["平鎮市", "324", "-7"], ["龍潭鄉", "325", "-7"], ["楊梅鎮", "326", "-7"], ["新屋鄉", "327", "-7"], ["觀音鄉", "328", "-7"], ["桃園市", "330", "-7"], ["龜山鄉", "333", "-7"], ["八德市", "334", "-7"], ["大溪鎮", "335", "-7"], ["復興鄉", "336", "-7"], ["大園鄉", "337", "-7"], ["蘆竹鄉", "338", "-7"], ["竹南鎮", "350", "-8"], ["頭份鎮", "351", "-8"], ["三灣鄉", "352", "-8"], ["南庄鄉", "353", "-8"], ["獅潭鄉", "354", "-8"], ["後龍鎮", "356", "-8"], ["通霄鎮", "357", "-8"], ["苑裡鎮", "358", "-8"], ["苗栗市", "360", "-8"], ["造橋鄉", "361", "-8"], ["頭屋鄉", "362", "-8"], ["公館鄉", "363", "-8"], ["大湖鄉", "364", "-8"], ["泰安鄉", "365", "-8"], ["銅鑼鄉", "366", "-8"], ["三義鄉", "367", "-8"], ["西湖鄉", "368", "-8"], ["卓蘭鎮", "369", "-8"], ["市中區", "400", "-9"], ["市東區", "401", "-9"], ["市南區", "402", "-9"], ["市西區", "403", "-9"], ["市北區", "404", "-9"], ["北屯區", "406", "-9"], ["西屯區", "407", "-9"], ["南屯區", "408", "-9"], ["太平市", "411", "-10"], ["大里市", "412", "-10"], ["霧峰鄉", "413", "-10"], ["烏日鄉", "414", "-10"], ["豐原市", "420", "-10"], ["后里鄉", "421", "-10"], ["石岡鄉", "422", "-10"], ["東勢鎮", "423", "-10"], ["和平鄉", "424", "-10"], ["新社鄉", "426", "-10"], ["潭子鄉", "427", "-10"], ["大雅鄉", "428", "-10"], ["神岡鄉", "429", "-10"], ["大肚鄉", "432", "-10"], ["沙鹿鎮", "433", "-10"], ["龍井鄉", "434", "-10"], ["梧棲鎮", "435", "-10"], ["清水鎮", "436", "-10"], ["大甲鎮", "437", "-10"], ["外埔鄉", "438", "-10"], ["大安鄉", "439", "-10"], ["彰化市", "500", "-11"], ["芬園鄉", "502", "-11"], ["花壇鄉", "503", "-11"], ["秀水鄉", "504", "-11"], ["鹿港鎮", "505", "-11"], ["福興鄉", "506", "-11"], ["線西鄉", "507", "-11"], ["和美鎮", "508", "-11"], ["伸港鄉", "509", "-11"], ["員林鎮", "510", "-11"], ["社頭鄉", "511", "-11"], ["永靖鄉", "512", "-11"], ["埔心鄉", "513", "-11"], ["溪湖鎮", "514", "-11"], ["大村鄉", "515", "-11"], ["埔鹽鄉", "516", "-11"], ["田中鎮", "520", "-11"], ["北斗鎮", "521", "-11"], ["田尾鄉", "522", "-11"], ["埤頭鄉", "523", "-11"], ["溪州鄉", "524", "-11"], ["竹塘鄉", "525", "-11"], ["二林鎮", "526", "-11"], ["大城鄉", "527", "-11"], ["芳苑鄉", "528", "-11"], ["二水鄉", "530", "-11"], ["南投市", "540", "-12"], ["中寮鄉", "541", "-12"], ["草屯鎮", "542", "-12"], ["國姓鄉", "544", "-12"], ["埔里鎮", "545", "-12"], ["仁愛鄉", "546", "-12"], ["名間鄉", "551", "-12"], ["集集鎮", "552", "-12"], ["水里鄉", "553", "-12"], ["魚池鄉", "555", "-12"], ["信義鄉", "556", "-12"], ["竹山鎮", "557", "-12"], ["鹿谷鄉", "558", "-12"], ["嘉義市", "600", "-13"], ["番路鄉", "602", "-14"], ["梅山鄉", "603", "-14"], ["竹崎鄉", "604", "-14"], ["里山鄉", "605", "-14"], ["中埔鄉", "606", "-14"], ["大埔鄉", "607", "-14"], ["水上鄉", "608", "-14"], ["鹿草鄉", "611", "-14"], ["太保市", "612", "-14"], ["朴子市", "613", "-14"], ["東石鄉", "614", "-14"], ["六腳鄉", "615", "-14"], ["新港鄉", "616", "-14"], ["民雄鄉", "621", "-14"], ["大林鎮", "622", "-14"], ["溪口鄉", "623", "-14"], ["義竹鄉", "624", "-14"], ["布袋鎮", "625", "-14"], ["斗南鎮", "630", "-15"], ["大埤鄉", "631", "-15"], ["虎尾鎮", "632", "-15"], ["土庫鎮", "633", "-15"], ["褒忠鄉", "634", "-15"], ["東勢鄉", "635", "-15"], ["台西鄉", "636", "-15"], ["崙背鄉", "637", "-15"], ["麥寮鄉", "638", "-15"], ["斗六市", "640", "-15"], ["林內鄉", "643", "-15"], ["古坑鄉", "646", "-15"], ["莿桐鄉", "647", "-15"], ["西螺鎮", "648", "-15"], ["二崙鄉", "649", "-15"], ["北港鎮", "651", "-15"], ["水林鄉", "652", "-15"], ["口湖鄉", "653", "-15"], ["四湖鄉", "654", "-15"], ["元長鄉", "655", "-15"], ["中西區", "700", "-16"], ["市東區", "701", "-16"], ["市南區", "702", "-16"], ["市西區", "703", "-16"], ["市北區", "704", "-16"], ["安平區", "708", "-16"], ["安南區", "709", "-16"], ["永康市", "710", "-17"], ["歸仁鄉", "711", "-17"], ["新化鎮", "712", "-17"], ["左鎮鄉", "713", "-17"], ["玉井鄉", "714", "-17"], ["楠西鄉", "715", "-17"], ["南化鄉", "716", "-17"], ["仁德鄉", "717", "-17"], ["關廟鄉", "718", "-17"], ["龍崎鄉", "719", "-17"], ["官田鄉", "720", "-17"], ["麻豆鎮", "721", "-17"], ["佳里鎮", "722", "-17"], ["西港鄉", "723", "-17"], ["七股鄉", "724", "-17"], ["將軍鄉", "725", "-17"], ["學甲鎮", "726", "-17"], ["北門鄉", "727", "-17"], ["新營市", "730", "-17"], ["後壁鄉", "731", "-17"], ["白河鎮", "732", "-17"], ["東山鄉", "733", "-17"], ["六甲鄉", "734", "-17"], ["下營鄉", "735", "-17"], ["柳營鄉", "736", "-17"], ["鹽水鎮", "737", "-17"], ["善化鎮", "741", "-17"], ["大內鄉", "742", "-17"], ["山上鄉", "743", "-17"], ["新市鄉", "744", "-17"], ["安定鄉", "745", "-17"], ["新興區", "800", "-18"], ["前金區", "801", "-18"], ["苓雅區", "802", "-18"], ["鹽埕區", "803", "-18"], ["鼓山區", "804", "-18"], ["旗津區", "805", "-18"], ["前鎮區", "806", "-18"], ["三民區", "807", "-18"], ["楠梓區", "811", "-18"], ["小港區", "812", "-18"], ["左營區", "813", "-18"], ["仁武鄉", "814", "-19"], ["大社鄉", "815", "-19"], ["沙群島", "817", "-26"], ["沙群島", "819", "-26"], ["岡山鎮", "820", "-19"], ["路竹鄉", "821", "-19"], ["阿蓮鄉", "822", "-19"], ["田寮鄉", "823", "-19"], ["燕巢鄉", "824", "-19"], ["橋頭鄉", "825", "-19"], ["梓官鄉", "826", "-19"], ["彌陀鄉", "827", "-19"], ["永安鄉", "828", "-19"], ["湖內鄉", "829", "-19"], ["鳳山市", "830", "-19"], ["大寮鄉", "831", "-19"], ["林園鄉", "832", "-19"], ["鳥松鄉", "833", "-19"], ["大樹鄉", "840", "-19"], ["旗山鎮", "842", "-19"], ["美濃鎮", "843", "-19"], ["六龜鄉", "844", "-19"], ["內門鄉", "845", "-19"], ["杉林鄉", "846", "-19"], ["甲仙鄉", "847", "-19"], ["桃源鄉", "848", "-19"], ["三民鄉", "849", "-19"], ["茂林鄉", "851", "-19"], ["茄萣鄉", "852", "-19"], ["馬公市", "880", "-20"], ["西嶼鄉", "881", "-20"], ["望安鄉", "882", "-20"], ["七美鄉", "883", "-20"], ["白沙鄉", "884", "-20"], ["湖西鄉", "885", "-20"], ["金沙鎮", "890", "-24"], ["金湖鎮", "891", "-24"], ["金寧鄉", "892", "-24"], ["金城鎮", "893", "-24"], ["烈嶼鄉", "894", "-24"], ["烏坵鄉", "896", "-24"], ["屏東市", "900", "-21"], ["地門鄉", "901", "-21"], ["霧臺鄉", "902", "-21"], ["瑪家鄉", "903", "-21"], ["九如鄉", "904", "-21"], ["里港鄉", "905", "-21"], ["高樹鄉", "906", "-21"], ["鹽埔鄉", "907", "-21"], ["長治鄉", "908", "-21"], ["麟洛鄉", "909", "-21"], ["竹田鄉", "911", "-21"], ["內埔鄉", "912", "-21"], ["萬丹鄉", "913", "-21"], ["潮州鎮", "920", "-21"], ["泰武鄉", "921", "-21"], ["來義鄉", "922", "-21"], ["萬巒鄉", "923", "-21"], ["崁頂鄉", "924", "-21"], ["新埤鄉", "925", "-21"], ["南州鄉", "926", "-21"], ["林邊鄉", "927", "-21"], ["東港鎮", "928", "-21"], ["琉球鄉", "929", "-21"], ["佳冬鄉", "931", "-21"], ["新園鄉", "932", "-21"], ["枋寮鄉", "940", "-21"], ["枋山鄉", "941", "-21"], ["春日鄉", "942", "-21"], ["獅子鄉", "943", "-21"], ["車城鄉", "944", "-21"], ["牡丹鄉", "945", "-21"], ["恆春鎮", "946", "-21"], ["滿州鄉", "947", "-21"], ["台東市", "950", "-22"], ["綠島鄉", "951", "-22"], ["蘭嶼鄉", "952", "-22"], ["延平鄉", "953", "-22"], ["卑南鄉", "954", "-22"], ["鹿野鄉", "955", "-22"], ["關山鎮", "956", "-22"], ["海端鄉", "957", "-22"], ["池上鄉", "958", "-22"], ["東河鄉", "959", "-22"], ["成功鎮", "961", "-22"], ["長濱鄉", "962", "-22"], ["麻里鄉", "963", "-22"], ["金峰鄉", "964", "-22"], ["大武鄉", "965", "-22"], ["達仁鄉", "966", "-22"], ["花蓮市", "970", "-23"], ["新城鄉", "971", "-23"], ["秀林鄉", "972", "-23"], ["吉安鄉", "973", "-23"], ["壽豐鄉", "974", "-23"], ["鳳林鎮", "975", "-23"], ["光復鄉", "976", "-23"], ["豐濱鄉", "977", "-23"], ["瑞穗鄉", "978", "-23"], ["萬榮鄉", "979", "-23"], ["玉里鎮", "981", "-23"], ["卓溪鄉", "982", "-23"], ["富里鄉", "983", "-23"]], //當選擇一個City時,取得Area的範圍Array getAreaArray : function(store, id) { var returnData = Array(); store.each(function(record) { if (record.get('ref') == id) { returnData[returnData.length] = [record.get('text'), record.get('value')]; } }); return returnData; }, //初始設定 initComponent : function() { //載入cityCode的Array成Store this.cityStore = new Ext.data.SimpleStore({ fields : ['text', 'value'], data : this.cityCode }); //載入areaCode的Array成Store this.areaStore = new Ext.data.SimpleStore({ fields : ['text', 'value', 'ref'], data : this.areaCode }); //CityComboBox,縣市 this.cityCombo = new Ext.form.ComboBox({ id : this.CityId, store : this.cityStore, emptyText : this.CityEmptyText, mode : 'local', valueField : 'value', displayField : 'text', // autoLoad:true, triggerAction : 'all', width : this.CityWidth, columnWidth : 0.45,//縣市跟鄉鎮的comboBox比例大小可以調整這個 name : this.CityName, hiddenName : this.CityHiddenName, editable : false }); //AreaComboBox,鄉鎮 this.areaCombo = new Ext.form.ComboBox({ id : this.AreaId, emptyText : this.AreaEmptyText, store : new Ext.data.SimpleStore({ fields : ['text', 'value', 'ref'] }), mode : 'local', valueField : 'value', displayField : 'text', triggerAction : 'all', width : this.AreaWidth, style : 'padding-left:5px', columnWidth : 0.5,//縣市跟鄉鎮的comboBox比例大小可以調整這個 name : this.AreaName, hiddenName : this.AreaHiddenName, editable : false }); //縣市被選取時的動作 this.cityCombo.on('select', function(comboBox) { this.areaCombo.store.loadData(this.getAreaArray(this.areaStore, comboBox.getValue())); this.areaCombo.reset(); }.createDelegate(this)); //手動設定值,也就是啟始ZipCode的方式 this.setZipCode = function(cityCode, areaCode) { this.cityCombo.setValue(cityCode, true); this.cityCombo.fireEvent('select', this.cityCombo); this.areaCombo.setValue(areaCode, true); } var config = { layout : 'column', items : [this.cityCombo, this.areaCombo] }; // eo config object // apply config Ext.apply(this, Ext.apply(this.initialConfig, config)); // call parent Ext.plugin.TaiwaZipCode.superclass.initComponent.apply(this, arguments); } }); Ext.reg('taiwanZipCode', Ext.plugin.TaiwaZipCode);
執行方法:
var taiwanZipCode = new Ext.plugin.TaiwaZipCode({CityId : Ext.id(), AreaId : Ext.id(), CityName : 'cityName', CityHiddenName : 'cityCode', AreaName : 'areaName', AreaHiddenName : 'areaCode', CityEmptyText:'縣市', AreaEmptyText:'鄉鎮',columnWidth:.3 });
備註:使用時建議javascript檔案使用無DOM的UTF8或者載入時指定charset
<script type=”text/javascript” charset=”big5” src=”xxx.js”></script>