文档章节

省市区 - 三级联动通用化模块组件

风间影月
 风间影月
发布于 2017/04/20 11:01
字数 770
阅读 12
收藏 0

都说我们要做模块化设计,而不要做功能化设计

什么是模块化设计,就是可插拔性高,组件化,想要就用,不要用拉倒,直接删除就行

什么是功能化设计,就是一个简单的功能,实现想要的效果,但是不够通用化,别人要用的话需要读懂你的代码,还需要复制黏贴很多代码这样效率不高

 

今天写了一个省市区三级联动的模块,写完后使用会非常方便,也很灵活

主要使用到的技术:jquery,redis,springMVC,MyBatis(springMVC和MyBatis无所谓,你用struts或者hibernate或者spring data都行)

首先页面引入js

1 <script src="/js/jquery-2.2.4.min.js"></script>
2 <script src="/cityselect/js/jquery.cityselect.js"></script>

HTML中写入3个div块,这是互斥的,div#id不同就可以做到模块化可插拔

 1 <div id="city"> 
 2         <select class="prov"></select>  
 3         <select class="city" disabled="disabled"></select> 
 4         <select class="dist" disabled="disabled"></select> 
 5     </div> 
 6     
 7     <div id="city2"> 
 8         <select class="prov"></select>  
 9         <select class="city" disabled="disabled"></select> 
10         <select class="dist" disabled="disabled"></select> 
11     </div> 
12     
13     <div id="city3"> 
14         <select class="prov"></select>  
15         <select class="city" disabled="disabled"></select> 
16         <select class="dist" disabled="disabled"></select> 
17     </div>

初始化JS:

<script type="text/javascript">
        /**
         * 
         * @Description: 省市区三级联动api
         * Copyright: Copyright (c) 2016
         * 
         * ==============================
         * 参数说明
         * url:省市数据josn文件路径
         * prov:默认省份
         * city:默认城市
         * dist:默认地区(县)
         * nodata:无数据状态
         * required:必选项
         * ==============================
         * 
         * @author leechenxiang
         * @date 2016年6月16日 下午3:46:58
         * @version V1.0
         */
        $(function(){
            $("#city").citySelect({
                prov:"江苏省",
                city:"无锡市",
                dist:"南长区",
                required:false
            }); 
            
            $("#city2").citySelect({
                nodata:"none",
                required:false
            }); 
            
            $("#city3").citySelect({
                nodata:"none",
                required:false
            }); 
            
        });
    </script>

后台controller:

 1 /**
 2      * 
 3      * @Description: 获取所有的省市区列表
 4      * @return
 5      * @throws Exception
 6      * 
 7      * @author leechenxiang
 8      * @date 2016年6月16日 上午11:22:10
 9      */
10     @RequestMapping("/getCities")
11     @ResponseBody
12     public CitiesDataResult getCities() throws Exception {
13         CitiesDataResult areas = commonService.getAllCities();
14         return areas;
15     }

service:

 1 @Override
 2     public CitiesDataResult getAllCities() {
 3         // 取出缓存
 4         try {
 5             String citiesDataResult = jedisClient.get(REDIS_CITIES_KEY);
 6             if (!StringUtils.isBlank(citiesDataResult)) {
 7                 CitiesDataResult redisResult = JsonUtils.jsonToPojo(citiesDataResult, CitiesDataResult.class);
 8                 return redisResult;
 9             }
10         } catch (Exception e1) {
11             e1.printStackTrace();
12         }
13         
14         List<AreaProvince> provinceList = areaProvinceMapper.getProvinceList();
15         List<Province> pList = new ArrayList<Province>();
16         for (AreaProvince province : provinceList) {
17             int provinceId = province.getProvinceId();
18             String provinceName = province.getProvinceName();
19             
20             List<AreaCity> cityList = areaProvinceMapper.getCityListBypId(provinceId);
21             List<City> cList = new ArrayList<City>();
22             for (AreaCity city : cityList) {
23                 int cityId = city.getCityId();
24                 String cityName = city.getCityName();
25                 
26                 List<District> districtList = areaProvinceMapper.getDistrictListBycId(cityId);
27                 
28                 City c = new City();
29                 c.setN(cityName);
30                 c.setA(districtList);
31                 cList.add(c);
32             }
33             
34             Province p = new Province(provinceName, cList);
35             pList.add(p);
36         }
37         
38         CitiesDataResult result = new CitiesDataResult();
39         result.setCitylist(pList);
40         
41         // 放入缓存
42         try {
43             jedisClient.set(REDIS_CITIES_KEY, JsonUtils.objectToJson(result));
44         } catch (Exception e) {
45             e.printStackTrace();
46         }
47         
48         return result;
49     }

如果需要默认选中那么只需要对这3个参数赋值即可:

prov:"江苏省",
city:"无锡市",
dist:"南长区",

对于省市区的数据源,可以存放在数据库表中,也可以直接存入js,作为一个json来调用即可

如果没有省市区可以淘一下万能的X宝,可以参考如下链接,真的是太强大了,把省市区直接细化到了极致:

省市区 数据库 脚本 excel

 

本文转载自:http://www.cnblogs.com/leechenxiang/p/5591332.html

风间影月
粉丝 4
博文 126
码字总数 252
作品 0
无锡
技术主管
私信 提问
PHP 表单生成器 - form-builder

form-builder PHP表单生成器,快速生成现代化的form表单。包含复选框、单选框、输入框、下拉选择框等元素以及,省市区三级联动,时间选择,日期选择,颜色选择,文件/图片上传等功能。 表单是使用...

xaboy
2018/06/26
6.6K
4
省市区三级联动jquery插件--city-picker

下拉面板式省市区三级联动jquery插件,视觉清爽,交互体验超棒。 支持省市二级联动,省市区三级联动,省市区地址缩写。 支持在Form中通过Tab上下游走Focus,省市区可以单独点击,标签式互动。...

史涛
2016/03/01
15.8K
7
rattan/address_popup

@TOC 前言 最近在学习开发H5产品,想用【mint-ui】的Picker和Popup组件去创建一个地址选择器。发现mint-ui官网只有一个简单的示例,要满足省/市/区三级联动的需求还需要做很多事情,也找了很...

rattan
04/19
0
0
众邦科技/CRMEB微信小程序商城

CRMEB客户管理+电商管理系统 本项目还在不断开发完善中,如有建议或问题请在这里提出 如果对您有帮助,您可以点右上角 "Star" 支持一下 谢谢! 帮助文档 公众号和小程序打通版 https://gitee....

众邦科技
01/11
0
0
xaboy/form-builder

form-builder PHP表单生成器,快速生成现代化的form表单。包含复选框、单选框、输入框、下拉选择框等元素以及,省市区三级联动,时间选择,日期选择,颜色选择,文件/图片上传等功能。 表单是使用...

xaboy
2018/06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
41
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部