1/** 2 * jquery.citys.js 1.2 3 * http://jquerywidget.com 4 */ 5(function (factory) { 6 if (typeof define === "function" && define.amd){ 7 // AMD 8 if (typeof jQuery === 'undefined') { 9 define(['jquery'],factory); 10 }else{ 11 define(function(){ 12 factory(jQuery); 13 }); 14 } 15 }else if (typeof define === "function" && define.cmd){ 16 // CMD 17 if (typeof jQuery === 'undefined') { 18 define(function(require){ 19 var jQuery = require('jquery'); 20 factory(jQuery); 21 }); 22 }else{ 23 define(function(){ 24 factory(jQuery); 25 }); 26 } 27 } else if (typeof module === 'object' && module.exports) { 28 // Node/CommonJS 29 module.exports = function( root, jQuery ) { 30 if (typeof jQuery === 'undefined') { 31 if (typeof window !== 'undefined' ) { 32 jQuery = require('jquery'); 33 } else { 34 jQuery = require('jquery')(root); 35 } 36 } 37 factory(jQuery); 38 return jQuery; 39 }; 40 } else { 41 //Browser globals 42 factory(jQuery); 43 } 44}(function ($) { 45 $.support.cors = true; 46 $.fn.citys = function(parameter,getApi) { 47 if(typeof parameter == 'function'){ //éè½½ 48 getApi = parameter; 49 parameter = {}; 50 }else{ 51 parameter = parameter || {}; 52 getApi = getApi||function(){}; 53 } 54 var defaults = { 55 data:null, //æ°æ®æº 56 dataUrl:'https://passer-by.com/data_location/list.json', //æ°æ®åºå°å 57 crossDomain: true, //æ¯å¦å¼å¯è·¨å 58 dataType:'json', //æ°æ®åºç±»å:'json'æ'jsonp' 59 provinceField:'province', //ç份忮µå 60 cityField:'city', //åå¸å段å 61 districtField:'district', //å°åºå段å 62 valueType:'name', //䏿æ¡å¼çç±»å,codeè¡æ¿åºå代ç ,nameå°å 63 code:0, //å°åºç¼ç 64 province:0, //ç份,å¯ä»¥ä¸ºå°åºç¼ç æè åç§° 65 city:0, //åå¸,å¯ä»¥ä¸ºå°åºç¼ç æè åç§° 66 district:0, //å°åº,å¯ä»¥ä¸ºå°åºç¼ç æè åç§° 67 required: true, //æ¯å¦å¿ é¡»éä¸ä¸ª 68 nodata: 'hidden', //彿 æ°æ®æ¶ç表ç°å½¢å¼:'hidden'éè,'disabled'ç¦ç¨,为空ä¸åä»»ä½å¤ç 69 placeholder:' - è¯·éæ© - ', // é»è®¤é¡¹ 70 onChange:function(){} //å°åºåæ¢æ¶è§¦å,åè°å½æ°ä¼ å ¥å°åºæ°æ® 71 }; 72 var options = $.extend({}, defaults, parameter); 73 return this.each(function() { 74 //对象å®ä¹ 75 var _api = {}; 76 var $this = $(this); 77 var $province = $this.find('select[name="'+options.provinceField+'"]'), 78 $city = $this.find('select[name="'+options.cityField+'"]'), 79 $district = $this.find('select[name="'+options.districtField+'"]'); 80 var init = function(data){ 81 var province,city,district,hasCity; 82 var initCode = function(){ 83 if(options.code){ //å¦æè®¾ç½®å°åºç¼ç ï¼å忽ç¥åç¬è®¾ç½®çä¿¡æ¯ 84 var code = options.code.toString(); 85 var c = code.replace(/\d{4}$/,'0000'); 86 if(data[c]){ 87 options.province = c; 88 } 89 c = code.replace(/\d{2}$/,'00'); 90 if(data[c]){ 91 options.city = c; 92 } 93 c = options.code%1e2 ? options.code : ''; 94 options.district = c; 95 }else{ 96 options.province = ($province.val()||'').toString().replace(/\d{4}$/,'0000'); 97 options.city = ($city.val()||'').toString().replace(/\d{2}$/,'00'); 98 options.district = ($district.val()||'').toString(); 99 } 100 }; 101 var updateCode = function(){ 102 province={},city={},district={}; 103 hasCity = false; //夿æ¯éæå°çº§åå¸ 104 for(var code in data){ 105 if(code.match(/0000$/)){ 106 province[code]=data[code]; 107 if(options.required&&!options.province){ 108 if(options.city&&options.city.match(/0000$/)){ //çæªå¡«ï¼å¹¶å¤æä¸ºç´è¾å¸ 109 options.province = options.city; 110 }else{ 111 options.province = code; 112 } 113 }else if(isNaN(options.province)&&data[code].indexOf(options.province)>-1){ 114 options.province = code; 115 } 116 } 117 } 118 if(options.province){ 119 for(var code in data){ 120 var prefix = code.replace(/\d{4}$/,'0000'); 121 if(code!=prefix&&prefix==options.province){ 122 if(code.match(/00$/)){ 123 hasCity = true; 124 city[code]=data[code]; 125 if(options.required&&!options.city){ 126 options.city = code; 127 }else if(isNaN(options.city)&&data[code].indexOf(options.city)>-1){ 128 options.city = code; 129 } 130 }else if(code.match(/[89]0\d{2}$/)){ 131 city[code] = data[code]; 132 if(options.required&&!options.city){ 133 options.city = code; 134 }else if(isNaN(options.city)&&data[code].indexOf(options.city)>-1){ 135 options.city = code; 136 } 137 } 138 } 139 } 140 } 141 if(hasCity){ 142 if(options.city){ 143 for(var code in data){ 144 var prefix = code.replace(/\d{2}$/,'00'); 145 if(code!=prefix&&prefix==options.city){ 146 district[code] = data[code]; 147 if(options.required&&!options.district){ 148 options.district = code; 149 }else if(isNaN(options.district)&&data[code].indexOf(options.district)>-1){ 150 options.district = code; 151 } 152 } 153 } 154 } 155 }else{ 156 for(var code in data){ 157 var prefix = code.replace(/\d{4}$/,'0000'); 158 if(code!=prefix&&prefix==options.province){ 159 district[code] = data[code]; 160 if(options.required&&!options.district){ 161 options.district = code; 162 }else if(isNaN(options.district)&&data[code].indexOf(options.district)>-1){ 163 options.district = code; 164 } 165 } 166 } 167 } 168 }; 169 var format = { 170 province:function(){ 171 $province.empty(); 172 if(!options.required){ 173 $province.append('<option value="">'+options.placeholder+'</option>'); 174 } 175 for(var i in province){ 176 $province.append('<option value="'+(options.valueType=='code'?i:province[i])+'" data-code="'+i+'">'+province[i]+'</option>'); 177 } 178 if(options.province){ 179 var value = options.valueType=='code'?options.province:prov
179ince[options.province]; 180 $province.val(value); 181 } 182 this.city(); 183 }, 184 city:function(){ 185 $city.empty(); 186 if(!hasCity){ 187 $city.css('display','none'); 188 }else{ 189 $city.css('display',''); 190 if(!options.required){ 191 $city.append('<option value="">'+options.placeholder+'</option>'); 192 } 193 if(options.nodata=='disabled'){ 194 $city.prop('disabled',$.isEmptyObject(city)); 195 }else if(options.nodata=='hidden'){ 196 $city.css('display',$.isEmptyObject(city)?'none':''); 197 } 198 for(var i in city){ 199 $city.append('<option value="'+(options.valueType=='code'?i:city[i])+'" data-code="'+i+'">'+city[i]+'</option>'); 200 } 201 if(options.city){ 202 var value = options.valueType=='code'?options.city:city[options.city]; 203 $city.val(value); 204 }else if(options.district){ 205 var value = options.valueType=='code'?options.district:city[options.district]; 206 $city.val(value); 207 } 208 } 209 this.district(); 210 }, 211 district:function(){ 212 $district.empty(); 213 if(!options.required){ 214 $district.append('<option value="">'+options.placeholder+'</option>'); 215 } 216 if(options.nodata=='disabled'){ 217 $district.prop('disabled',$.isEmptyObject(district)); 218 }else if(options.nodata=='hidden'){ 219 $district.css('display',$.isEmptyObject(district)?'none':''); 220 } 221 for(var i in district){ 222 $district.append('<option value="'+(options.valueType=='code'?i:district[i])+'" data-code="'+i+'">'+district[i]+'</option>'); 223 } 224 if(options.district){ 225 var value = options.valueType=='code'?options.district:district[options.district]; 226 $district.val(value); 227 } 228 } 229 }; 230 // è®¾ç½®å¼ 231 _api.setCode = function(code){ 232 options.code = code; 233 initCode(); 234 updateCode(); 235 format.province(); 236 }; 237 // è·åå½åå°çä¿¡æ¯ 238 _api.getInfo = function(){ 239 var status = { 240 direct:!hasCity, 241 province:data[options.province]||'', 242 city:data[options.city]||'', 243 district:data[options.district]||'' 244 }; 245 if($district.length){ 246 status['code'] = options.district||options.city||options.province; 247 }else if($city.length){ 248 status['code'] = options.city||options.province; 249 }else if($province.length){ 250 status['code'] = options.province; 251 }else{ 252 status['code'] = 0; 253 } 254 return status; 255 }; 256 // äºä»¶ç»å® 257 $province.on('change',function(){ 258 options.province = $(this).find('option:selected').data('code')||0; //éä¸èç¹çåºå代ç 259 options.city = 0; 260 options.district = 0; 261 updateCode(); 262 format.city(); 263 options.onChange(_api.getInfo()); 264 }); 265 $city.on('change',function(){ 266 options.city = $(this).find('option:selected').data('code')||0; //éä¸èç¹çåºå代ç 267 options.district = 0; 268 updateCode(); 269 format.district(); 270 options.onChange(_api.getInfo()); 271 }); 272 $district.on('change',function(){ 273 options.district = $(this).find('option:selected').data('code')||0; //éä¸èç¹çåºå代ç 274 options.onChange(_api.getInfo()); 275 }); 276 // åå§å 277 initCode(); 278 updateCode(); 279 format.province(); 280 options.onChange(_api.getInfo()); 281 getApi(_api); 282 }; 283 if(options.data){ 284 init(options.data); 285 }else{ 286 $.ajax({
287 url:options.dataUrl, 288 type:'GET', 289 crossDomain: options.crossDomain, 290 dataType:options.dataType, 291 jsonpCallback:'jsonp_location', 292 success:init 293 }); 294 } 295 }); 296 }; 297}));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.