省市三级联动
Posted 我的人生只需要一次成功
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了省市三级联动相关的知识,希望对你有一定的参考价值。
mumuy-widget-91839b8
http://jquerywidget.com/
/** * jquery.citys.js 1.0 * http://jquerywidget.com */ ;(function (factory) { if (typeof define === "function" && (define.amd || define.cmd) && !jQuery) { // AMD或CMD define([ "jquery" ],factory); } else if (typeof module === \'object\' && module.exports) { // Node/CommonJS module.exports = function( root, jQuery ) { if ( jQuery === undefined ) { if ( typeof window !== \'undefined\' ) { jQuery = require(\'jquery\'); } else { jQuery = require(\'jquery\')(root); } } factory(jQuery); return jQuery; }; } else { //Browser globals factory(jQuery); } }(function ($) { $.support.cors = true; $.fn.citys = function(parameter,getApi) { if(typeof parameter == \'function\'){ //重载 getApi = parameter; parameter = {}; }else{ parameter = parameter || {}; getApi = getApi||function(){}; } var defaults = { dataUrl:\'http://passer-by.com/data_location/list.json\', //数据库地址 crossDomain: true, //是否开启跨域 dataType:\'json\', //数据库类型:\'json\'或\'jsonp\' provinceField:\'province\', //省份字段名 cityField:\'city\', //城市字段名 areaField:\'area\', //地区字段名 valueType:\'code\', //下拉框值的类型,code行政区划代码,name地名 code:0, //地区编码 province:0, //省份,可以为地区编码或者名称 city:0, //城市,可以为地区编码或者名称 area:0, //地区,可以为地区编码或者名称 required: true, //是否必须选一个 nodata: \'hidden\', //当无数据时的表现形式:\'hidden\'隐藏,\'disabled\'禁用,为空不做任何处理 onChange:function(){} //地区切换时触发,回调函数传入地区数据 }; var options = $.extend({}, defaults, parameter); return this.each(function() { //对象定义 var _api = {}; var $this = $(this); var $province = $this.find(\'select[name="\'+options.provinceField+\'"]\'), $city = $this.find(\'select[name="\'+options.cityField+\'"]\'), $area = $this.find(\'select[name="\'+options.areaField+\'"]\'); $.ajax({ url:options.dataUrl, type:\'GET\', crossDomain: options.crossDomain, dataType:options.dataType, jsonpCallback:\'jsonp_location\', success:function(data){ var province,city,area,hasCity; if(options.code){ //如果设置地区编码,则忽略单独设置的信息 var c = options.code - options.code%1e4; if(data[c]){ options.province = c; } c = options.code - (options.code%1e4 ? options.code%1e2 : options.code); if(data[c]){ options.city = c; } c = options.code%1e2 ? options.code : 0; if(data[c]){ options.area = c; } } var updateData = function(){ province = {},city={},area={}; hasCity = false; //判断是非有地级城市 for(var code in data){ if(!(code%1e4)){ //获取所有的省级行政单位 province[code]=data[code]; if(options.required&&!options.province){ if(options.city&&!(options.city%1e4)){ //省未填,并判断为直辖市 options.province = options.city; }else{ options.province = code; } }else if(isNaN(options.province)&&data[code].indexOf(options.province)>-1){ options.province = code; } }else{ var p = code - options.province; if(options.province&&p>0&&p<1e4){ //同省的城市或地区 if(!(code%100)){ hasCity = true; city[code]=data[code]; if(options.required&&!options.city){ options.city = code; }else if(isNaN(options.city)&&data[code].indexOf(options.city)>-1){ options.city = code; } }else if(p>8000){ //省直辖县级行政单位 city[code] = data[code]; if(options.required&&!options.city){ options.city = code; }else if(isNaN(options.city)&&data[code].indexOf(options.city)>-1){ options.city = code; } }else if(hasCity){ //非直辖市 var c = code-options.city; if(options.city&&c>0&&c<100){ //同个城市的地区 area[code]=data[code]; if(options.required&&!options.area){ options.area = code; }else if(isNaN(options.area)&&data[code].indexOf(options.area)>-1){ options.area = code; } } }else{ area[code] = data[code]; //直辖市 if(options.required&&!options.area){ options.area = code; }else if(isNaN(options.area)&&data[code].indexOf(options.area)>-1){ options.area = code; } } } } } }; var format = { province:function(){ $province.empty(); if(!options.required){ $province.append(\'<option value=""> - 请选择 - </option>\'); } for(var i in province){ $province.append(\'<option value="\'+(options.valueType==\'code\'?i:province[i])+\'" data-code="\'+i+\'">\'+province[i]+\'</option>\'); } if(options.province){ var value = options.valueType==\'code\'?options.province:province[options.province]; $province.val(value); } this.city(); }, city:function(){ $city.empty(); if(!hasCity){ $city.css(\'display\',\'none\'); }else{ $city.css(\'display\',\'\'); if(!options.required){ $city.append(\'<option value=""> - 请选择 - </option>\'); } if(options.nodata==\'disabled\'){ $city.prop(\'disabled\',$.isEmptyObject(city)); }else if(options.nodata==\'hidden\'){ $city.css(\'display\',$.isEmptyObject(city)?\'none\':\'\'); } for(var i in city){ $city.append(\'<option value="\'+(options.valueType==\'code\'?i:city[i])+\'" data-code="\'+i+\'">\'+city[i]+\'</option>\'); } if(options.city){ var value = options.valueType==\'code\'?options.city:city[options.city]; $city.val(value); }else if(options.area){ var value = options.valueType==\'code\'?options.area:city[options.area]; $city.val(value); } } this.area(); }, area:function(){ $area.empty(); if(!options.required){ $area.append(\'<option value=""> - 请选择 - </option>\'); } if(options.nodata==\'disabled\'){ $area.prop(\'disabled\',$.isEmptyObject(area)); }else if(options.nodata==\'hidden\'){ $area.css(\'display\',$.isEmptyObject(area)?\'none\':\'\'); } for(var i in area){ $area.append(\'<option value="\'+(options.valueType==\'code\'?i:area[i])+\'" data-code="\'+i+\'">\'+area[i]+\'</option>\'); } if(options.area){ var value = options.valueType==\'code\'?options.area:area[options.area]; $area.val(value); } } }; //获取当前地理信息 _api.getInfo = function(){ var status = { direct:!hasCity, province:data[options.province]||\'\', city:data[options.city]||\'\', area:data[options.area]||\'\', code:options.area||options.city||options.province }; return status; }; //事件绑定 $province.on(\'change\',function(){ options.province = $(this).find(\'option:selected\').data(\'code\')||0; //选中节点的区划代码 options.city = 0; options.area = 0; updateData(); format.city(); options.onChange(_api.getInfo()); }); $city.on(\'change\',function(){ options.city = $(this).find(\'option:selected\').data(\'code\')||0; //选中节点的区划代码 options.area = 0; updateData(); format.area(); options.onChange(_api.getInfo()); }); $area.on(\'change\',function(){ options.area = $(this).find(\'option:selected\').data(\'code\')||0; //选中节点的区划代码 options.onChange(_api.getInfo()); }); //初始化 updateData(); format.province(); if(options.code){ options.onChange(_api.getInfo()); } getApi(_api); } }); }); }; }));
jquerywidget.com/code/jquery.citys.js
<div id="demo1" class="citys" id="distpicker"> <p> <select name="province" disabled="true"></select> <select name="city" ></select> </p> </div> function bindDemo1() { $(\'#demo1\').citys({ code:{{ Account_obj.city }}, required:false, nodata:\'disabled\', onChange:function(data){ var text = data[\'direct\']?\'(直辖市)\':\'\'; $(\'#place\').text(\'当前选中地区:\'+data[\'province\']+text+\' \'+data[\'city\']+\' \'+data[\'area\']); } }); }
以上是关于省市三级联动的主要内容,如果未能解决你的问题,请参考以下文章