$.fn.regionPicker() 地区选择插件 For PC端/手机移动端

点这里返回博客文章页:功能最全的仿淘宝、京东 js 三级四级多级联动地区选择插件 regionPicker PC端/手机移动端

GitHub开源(下载)地址:https://github.com/Copterfly/regionPicker

各用法demo

className html desc options desc
showType: 'popup'
.js-demo-mobile-1 4级(1-4) 手机端 levelRange: [1,4], // 国家/省份/城市/县区
isMobileBrowser:true
.js-demo-mobile-1-1 3级(2-4) 手机端 回显 countryId: 1, // 中国
levelRange: [2,4], // 省份/城市/县区
isMobileBrowser:true
selectedRegionIds: ['20', '235', '2313'] // 已经选择的地区 regionId 数组, 如:中国/广东省/广州/越秀区
.js-demo-10 2级(1-2) 回显 levelRange: [1,2], // 国家/省份
.js-demo-10-1 2级(2-3)
省级及以下必须传 countryId
levelRange: [2,3], // 省份/城市
.js-demo-11 3级(2-3-4)
省级及以下必须传 countryId
staticData: [...], // 传入静态数据
levelRange: [2,4], // 省份/城市/县区
.js-demo-11-1 3级(2-3-4) 回显 levelRange: [2,4], // 省份/城市/县区
selectedRegionIds: ['20', '235', '2313'] // 已经选择的地区 regionId 数组, 如:广东省/广州/越秀区
.js-demo-12 4级(1-2-3-4) levelRange: [1,4], // 国家/省份/城市/县区
.js-demo-12-1 4级(1-2-3-4) 回显 levelRange: [1,4], // 国家/省份/城市/县区
selectedRegionIds: ['1', '20', '235', '2313'] // 已经选择的地区 regionId 数组, 如:中国/广东省/广州/越秀区
.js-demo-13 其它参数 defaultText: '选我选我选我', // 默认: '请选择'
popupWidth: 500, // 默认: 300
popupExtraOffsetTop:-5, // 默认: 0
popupExtraOffsetLeft:10, // 默认: 0
styleClass:'popup-demo-13' // 默认: ''
.js-demo-14 多个元素用同一语句一起调用 国家/省份/城市
回调 $element 的使用
showType: 'insert' (请注意:select默认没有任何样式)
.js-demo-20
js-demo-21-1
2级(1-2) 回显 levelRange: [1,2], // 国家/省份
.js-demo-20-1
js-demo-21-1
2级(2-3)
省级及以下必须传 countryId
levelRange: [2,3], // 省份/城市
styleClass:'insert-demo-20-1' // 默认: ''
.js-demo-21
js-demo-21
3级(2-3-4)
省级及以下必须传 countryId
staticData: [...], // 传入静态数据
levelRange: [2,4], // 省份/城市/县区
.js-demo-21-1
js-demo-21-1
3级(2-3-4) 回显 levelRange: [2,4], // 省份/城市/县区
selectedRegionIds: ['20', '235', '2313'] // 已经选择的地区 regionId 数组, 如:广东省/广州/越秀区
.js-demo-22
js-demo-22
4级(1-2-3-4) levelRange: [1,4], // 国家/省份/城市/县区
defaultText: ['--国家--', '--省份--', '--城市--']
.js-demo-22-1
js-demo-22-1
4级(1-2-3-4) 回显 levelRange: [1,4], // 国家/省份/城市/县区
selectedRegionIds: ['1', '20', '235', '2313'] // 已经选择的地区 regionId 数组, 如:中国/广东省/广州/越秀区
.js-demo-23
js-demo-23
select 一个一个出来 isShowAllSelects: false // 是否显示所有 select,如为 false,则只显示最前的一个,选择后才显示后一个

参数说明

item default desc 影响的 showType
getRegionUrl null 数据接口,eg: '/Ajax/GetRegionChildList' all
countryId null 国家id all
dataKeys
                            {
                                data     : 'data',
                                id       : 'id',       // 地区id
                                parentId : 'parentId', // 上级id
                                name     : 'name',     // 地区名称
                                code     : 'code'      // 地区代码(拼音或英文)
                            }
                            
                        
地区数据每行的元素数据集合的key(如后端返回的数据的key跟默认值不一样,必须传此项)。
(每行地区数据应该具备此4项内容)
all
staticData [] 需要使用的静态数据数组(一般为某个国家下所有省市区平级数据,具体参见相关 demo),使用静态数据时,countryId 参数必传。
(数据结构参考 dataKeys)
all
separator '/' {string} popup模式显示到input的选中地区的分隔符 pupop
showType 'popup' 可选值:popup/insert,即是弹层式还是在页面生成几个select的方式。 -
popupWidth 300 弹窗默认总宽度(px)。 pupop
popupExtraOffsetTop 0 弹窗额外的上偏移量(一般没用,以防不测) pupop
popupExtraOffsetLeft 0 弹窗额外的左偏移量(一般没用,以防不测) pupop
styleClass '' 额外类名。可用于样式控制等特别需要。类名会加在如下位置:
showType: 'popup': 弹层最外层容器
showType: 'insert': 存放 select 的容器
all
levelRange [1,4] 地区层级范围,默认4级全部显示出来:国家/省份/城市/县区。可用值如下:
[1,4]: 国家/省份/城市/县区
[1,3]: 国家/省份/城市
[1,2]: 国家/省份
[2,4]: 省份/城市/县区 (必须传参数: countryId)
[2,3]: 省份/城市 (必须传参数: countryId)
[3,4] 这种用法不存在,传了也出不来你想要的东西。
all
selectedRegionIds [] 已经选择的地区 regionId 数组,按地区层级从大到小,数组元素数量只能小于等于 levelRange 范围的层级数。
如:[1, 20, 235, 2313] 或 ['1', '20', '235', '2313'],表示:中国/广东省/广州/越秀区。
如果:levelRange:[1,3](表示有3级地区:国家/省份/城市),但是 selectedRegionIds:['1', '20', '235', '2313'],传了4级数据,插件将会报错。
这些值一般由后端提供
all
isShowAllSelects true 是否显示所有 select,如为 false,则只显示最前的一个,选择后才显示后一个,如此类推。 insert
defaultText '请选择' 可传 string/array(仅showType: 'insert'时),如:'选我呀' 或 ['国家', '省份', '城市', '区域']
出现位置:
showType: 'popup': 调用插件的 input[placeholder]
showType: 'insert': select 的第一个 option 的文字
all
onSelect function (result, $element) { window.console && console.log(result); } 回调: popup 的地区被点击时 或 select 下拉框被选择时,给 hidden 的 input 赋值之类的操作都请在回调里做
result: 如:{ regions: [...], hasChild: true/false }
result.regions: [{"regionId":"20","regionName":"广东省"},{"regionId":"235","regionName":"广州"},...]
result.hasChild: true/false // 当前选中的层级是否还有下级(popup模式下此值为false时,则点选地区后弹层会关闭)
$element: 调用此插件的dom
all
手机端无此回调,因为在用户点击确定前,回调没有意义
onClose function (result, $element) { window.console && console.log(result); } 回调: popup模式 被关闭时
回调参数同 onSelect
popup
onShow function (result, $element) { } 回调: popup模式 弹层显示时
回调参数同 onSelect
popup
onComplete function ($element) { } 回调: 插件渲染输出完成
回调参数只有一个:$element
all
onAjaxStart function ($element) { } 回调: 获取异步数据发起请求前,即 ajax.beforeSend,主要用于取数据等待时禁用一些按钮等。
回调参数只有一个:$element
all
onAjaxComplete function ($element) { } 回调: 获取异步数据完成后,即 ajax.complete,主要用于取数据完成后启用一些按钮等。
回调参数只有一个:$element
all
isMobileBrowser false 否为手机端模式 仅 showType: 'popup' 时起作用
mobileHidePageId null 要隐藏的主页面id 仅 isMobileBrowser: true 时起作用
mobilePageTitle '选择所在地' 虚拟页面标题 仅 isMobileBrowser: true 时起作用

方法

  1. $('#xxx').regionPicker('reset'); // 重置 (把input的值设为空,把弹出的值也设为空,把所有select设为未选择,相当于用空值初始化插件)
  2. $('#xxx').regionPicker('destroy'); // 销毁 (解除插件调用)

接口数据结构

  1. 国家一级数据为一次性返回 (获得过一次会保存在内存里)
  2. 某个国家下的省份、城市、县区数据为一次性全部返回 (获得过一次会保存在内存里)

说明

打开浏览器控制台,边操作、边看调试输出、边看源代码。查看回调: onSelect(result),给 hidden 的 input 赋值之类的操作都请在回调里做。

在本页面源码中搜索各 demo 的类名(className) 即可看到具体调用方法。

引用

需要引用以下文件:

样式:

<link rel="stylesheet" type="text/css" href="css/regionPicker.css">

脚本:

<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="js/regionPicker.js"></script>