1.效果图 

2.联动js

  1. /**
  2. * jquery.choosearea.js - 地区联动封装
  3. */
  4. ; (function ($) {
  5. var choosearea = function (options) {
  6. this.set = $.extend({
  7. dataUrl: "/Content/Js/city_code.js",
  8. selectDomId: {
  9. province: "a",
  10. city: "b",
  11. county: "c"
  12. },
  13. data: null,
  14. initAreaIds: {
  15. Province: 0,
  16. City: 0,
  17. County: 0
  18. },
  19. eventInterface: {
  20. renderProvinceList: function (list, selectedId) {
  21. this.jq_province.empty().append($(this.ProvinceListHtml(list, selectedId, "请选择省")));
  22. },
  23. renderCityList: function (list, selectedId, isInit) {
  24. var city = this.jq_city;
  25. isInit = typeof (isInit) == "undefined" ? false : true;
  26. city.empty().append($(this.CityListHtml(list, selectedId, "请选择市")));
  27. },
  28. renderCountyList: function (list, selectedId, isInit) {
  29. var optionsHtml = this.CountyListHtml(list, selectedId, "请选择县");
  30. var county = this.jq_county;
  31. isInit = typeof (isInit) == "undefined" ? false : true;
  32. county.empty().append($(optionsHtml));
  33. },
  34. onchanged: function (cityId) {
  35.  
  36. }
  37. }
  38.  
  39. }, options);
  40. this.provinceList = [];
  41. this.cityList = [];
  42. this.countyList = [];
  43. this.jq_province = $("#" + this.set.selectDomId.province);
  44. this.jq_city = $("#" + this.set.selectDomId.city);
  45. this.jq_county = $("#" + this.set.selectDomId.county);
  46. this._init();
  47. };
  48. choosearea.prototype = {};
  49. choosearea.fn = choosearea.prototype;
  50. choosearea.fn._init = function () {
  51. var _this = this;
  52. $.get(_this.set.dataUrl, {}, function (datajson) {
  53. _this.set.data = datajson
  54. _this._setAreaList();
  55. _this._initRender(_this.set.initAreaIds.Province, _this.set.initAreaIds.City, _this.set.initAreaIds.County);
  56. _this._initEvents();
  57. }, "json");
  58. };
  59. //设置地区列表
  60. choosearea.fn._setAreaList = function () {
  61. this.provinceList = this.set.data.provinceList;
  62. this.cityList = this.set.data.cityList;
  63. this.countyList = this.set.data.countyList;
  64. };
  65.  
  66. //初始化渲染
  67. choosearea.fn._initRender = function (provinceId, cityId, countyId) {
  68.  
  69. this.set.eventInterface.renderProvinceList.call(this, this.provinceList, provinceId);
  70. var cityList = $.grep(this.cityList, function (n, i) {
  71. return n.ProID == provinceId;
  72. });
  73. this.set.eventInterface.renderCityList.call(this, cityList, cityId, true);
  74. var countyList = $.grep(this.countyList, function (n, i) {
  75. return n.CityID == cityId;
  76. });
  77. this.set.eventInterface.renderCountyList.call(this, countyList, countyId, true);
  78. };
  79.  
  80. //渲染列表
  81. choosearea.fn.ProvinceListHtml = function (list, selectedId, firstTips) {
  82. firstTips = firstTips || "";
  83. var selectedAttr = selectedId == 0 ? " selected='selected'" : "";
  84. var optionsHtml = firstTips != "" ? "<option value='0' " + selectedAttr + ">" + firstTips + "</option>" : "";
  85.  
  86. if (typeof (list) != "undefined") {
  87. $.each(list, function (i, city) {
  88. var selAttr = selectedId == city.ProID ? " selected='selected'" : "";
  89. optionsHtml += "<option value='" + city.ProID + "' " + selAttr + ">" + city.ProName + "</option>";
  90. });
  91. };
  92. return optionsHtml;
  93. };
  94. //渲染列表
  95. choosearea.fn.CityListHtml = function (list, selectedId, firstTips) {
  96. firstTips = firstTips || "";
  97. var selectedAttr = selectedId == 0 ? " selected='selected'" : "";
  98. var optionsHtml = firstTips != "" ? "<option value='0' " + selectedAttr + ">" + firstTips + "</option>" : "";
  99.  
  100. if (typeof (list) != "undefined") {
  101. $.each(list, function (i, city) {
  102. var selAttr = selectedId == city.CityID ? " selected='selected'" : "";
  103. optionsHtml += "<option value='" + city.CityID + "' " + selAttr + ">" + city.CityName + "</option>";
  104. });
  105. };
  106. return optionsHtml;
  107. };
  108. //渲染列表
  109. choosearea.fn.CountyListHtml = function (list, selectedId, firstTips) {
  110. firstTips = firstTips || "";
  111. var selectedAttr = selectedId == 0 ? " selected='selected'" : "";
  112. var optionsHtml = firstTips != "" ? "<option value='0' " + selectedAttr + ">" + firstTips + "</option>" : "";
  113. //console.log(list);
  114. if (typeof (list) != "undefined") {
  115. $.each(list, function (i, city) {
  116. var selAttr = selectedId == city.Id ? " selected='selected'" : "";
  117. optionsHtml += "<option value='" + city.Id + "' " + selAttr + ">" + city.DisName + "</option>";
  118. });
  119. };
  120. return optionsHtml;
  121. };
  122. //初始化事件
  123. choosearea.fn._initEvents = function () {
  124. var province = this.jq_province;
  125. var city = this.jq_city;
  126. var county = this.jq_county;
  127. var _this = this;
  128. province.change(function () {
  129. var id = parseInt($(this).val());
  130. var cityList = $.grep(_this.cityList, function (n, i) {
  131. return n.ProID == id;
  132. });
  133. _this.set.eventInterface.renderCityList.call(_this, cityList, 0);
  134. _this.set.eventInterface.renderCountyList.call(_this, [], 0, false);
  135. });
  136.  
  137. city.change(function () {
  138. var id = parseInt($(this).val());
  139. var countyList = $.grep(_this.countyList, function (n, i) {
  140. return n.CityID == id;
  141. });
  142. _this.set.eventInterface.renderCountyList.call(_this, countyList, 0, false);
  143. });
  144. };
  145. $.choosearea = choosearea;
  146. })(jQuery);

3.json数据

http://files.cnblogs.com/files/youngerliu/city_code.js

4.使用方法

  默认选择

  1. new $.choosearea({
  2. selectDomId: {
  3. province: "selProvince",
  4. city: "selCity",
  5. county: "selCounty"
  6. },
  7. initAreaIds: {Province:"0",City:"0",County:"0"}
  8. });

  指定选择

  1. new $.choosearea({
  2. selectDomId: {
  3. province: "selProvince",
  4. city: "selCity",
  5. county: "selCounty"
  6. },
  7. initAreaIds: {Province:"1",City:"1",County:"9"}
  8. });

省市县三级联动(jqurey+json)的更多相关文章

  1. 将省市县三级联动的json数据,转化为element-ui能用的格式,并使用

    var options=[]; var cities = { '北京': { '北京': ['东城区', '西城区', '崇文区', '宣武区', '朝阳区', '丰台区', '石景山区', '海淀区 ...

  2. android:省市县三级联动(基于json和spring)

    一.请看效果图": 二.程序的代码: 1.MainActivity.java package com.loveplusplus.loader.demo.ui; import org.json ...

  3. wex5 实战 省市县三级联动与地址薄同步

    无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2:  地址薄选项,利用inputSel ...

  4. Android 省市县 三级联动(android-wheel的使用)[转]

    转载:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为 ...

  5. Android 省市县 三级联动(android-wheel的使用)

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...

  6. php仿经典省市县三级联动

    之前有个需求要写个类似省市县三级联动的页面,于是,网上找了点资料看了下,其实原理很简单: 当我们选择一级栏目中某条记录的时候,会获取该栏目的vaule值,并发起ajax请求,后台根据这个vaule值, ...

  7. 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框

    JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP  mysql数据库  SpringMvc  ajax   Controller层  Service层  中国地区  省 ...

  8. jQuery - 全国省市县三级联动

    最近有空用jquery做了一个全国省市县的三级联动,在以后或许可以用的到 ,遗憾的是我还没用封装,等有空看能不能封装成一个插件 废话不多说,贴上代码: <!doctype html> &l ...

  9. 省市县三级联动 sql语句

    发现在网上的省市县三级联动大部分是mysql的.就算是sqlserver的,也不准确.于是就把mysql的给改了下,适用sqlserver.sql语句如下: CREATE TABLE Dic_Area ...

随机推荐

  1. 在Nodejs中如何调用C#的代码

    最近需要在Nodejs中用到C#的代码,从网上了解到可以采用Edgejs来实现Nodejs与C#的代码交互, 直接复制网上的代码运行总是出各种错,填了不少坑,现在把自己的案例代码大致整理一下,方便以后 ...

  2. python关于分割与拼接的那些事

    1.split分割 基于re模块和正则表达式对象的方法split(),以后再做学习 基于字符串的split()方法 :字符串对象的split()方法也只能处理非常简单的情况,而且不支持多个分隔符,对分 ...

  3. UWP Composition API - GroupListView(一)

    需求: 光看标题大家肯定不知道是什么东西,先上效果图: 这不就是ListView的Group效果吗?? 看上去是的.但是请听完需求.1.Group中的集合需要支持增量加载ISupportIncreme ...

  4. 将 xunit.runner.dnx 的 xml 输出转换为 Nunit 格式

    由于目前 DNX 缺乏 XSLT 的转换能力,因此只能使用变通方法.具体参考这个链接 主要内容复制过来是: From @eriklarko on July 14, 2015 7:38 As a wor ...

  5. Beginning Scala study note(6) Scala Collections

    Scala's object-oriented collections support mutable and immutable type hierarchies. Also support fun ...

  6. Linux学习笔记(9)-守护进程

    明天学这个!! ---------------------------------------------------------- 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终 ...

  7. 自己用的jquery经常用的工具command

    var Cmd = { Entity: { QueryString: {}, }, RootPath: function () { var pathName = window.location.pat ...

  8. [BZOJ1997][HNOI2010] 平面图判定

    Description Input Output     是的..BZOJ样例都没给.     题解(from 出题人): 如果只考虑简单的平面图判定,这个问题是非常不好做的. 但是题目中有一个条件— ...

  9. liunux 修改hostname

    最近鼓捣Oracle,记录些技巧 修改hostname # vim /ect/hosts # vim /etc/sysconfig/network 修改hostname # service netwo ...

  10. Web前端性能测试-性能测试知多少---深入分析前端站点的性能

    针对目前接手的web前端的性能,一时间不知道从什么地方入手,然后经过查找资料,发现其实还是蛮简单的. 前端性能测试对象: HTML.CSS.JS.AJAX等前端技术开发的Web页面 影响用户浏览网页速 ...