微信小程序实现选择地址省市区三级联动


Posted in Javascript onJune 21, 2020

本文实例为大家分享了微信小程序实现选择地址省市区三级联动的具体代码,供大家参考,具体内容如下

微信原生地址API,缺少省市区code,因此自己写了一个收货地址

思路:在onload预先加载全部省和第一个省的全部市和区,加载全部会导致几秒的事件阻塞。点击选择地址弹窗后,按需加载操作,滑动省加载对应的市和第一个市对应的区,滑动市加载区,滑动区只更改区的值

onLoad: function(options) {
 var that = this;
 // 此文件为全部省以及第一个省的市和区
 var cityData = districtLoad.districtLoad;
 // 存放省 
 const provinces = [];
 // 存放市
 const citys = [];
 // 存放区
 const countys = [];
 for (let i = 0; i < cityData.length; i++) {
  provinces.push(cityData[i]);
 }
 for (let i = 0; i < cityData[0].sub.length; i++) {
  citys.push(cityData[0].sub[i])
 }
 for (let i = 0; i < cityData[0].sub[0].sub.length; i++) {
  countys.push(cityData[0].sub[0].sub[i])
 }
 that.setData({
  provinces,
  citys,
  countys
 })
 }

滑动省市区事件

bindChange: function(e) {
 var that = this;
 var val = e.detail.value
 var t = this.data.values;
 // 滑动省
 if (val[0] != t[0]) {
  const citys = [];
  const countys = [];
  // 保存市
  for (let i = 0; i < cityData[val[0]].sub.length; i++) {
  citys.push(cityData[val[0]].sub[i])
  }
  // 保存第一个市的全部区
  for (let i = 0; i < cityData[val[0]].sub[0].sub.length; i++) {
  countys.push(cityData[val[0]].sub[0].sub[i])
  }
  // 保存
  this.setData({
  province: cityData[val[0]].name,
  city: cityData[val[0]].sub[0].name,
  citys: citys,
  countys: countys,
  values: val,
  value: [val[0], 0, 0],
  fdeliveryProvince: this.data.provinces[val[0]].code,
  fdeliveryCity: cityData[val[0]].sub[0].code,
  })
  // 防止只有省市的情况
  if (cityData[val[0]].sub[0].sub.length!=0){
  that.setData({
   county: cityData[val[0]].sub[0].sub[0].name,
   fdeliveryArea: cityData[val[0]].sub[0].sub[0].code
  })
  }else {
  that.setData({
   county: '',
   fdeliveryArea:''
  })
  }
  return;
 }
 // 滑动市
 if (val[1] != t[1]) {
  const countys = [];
  // 保存市
  for (let i = 0; i < cityData[val[0]].sub[val[1]].sub.length; i++) {
  countys.push(cityData[val[0]].sub[val[1]].sub[i])
  }
  // 保存
  this.setData({
  city: this.data.citys[val[1]].name,
  countys: countys,
  values: val,
  value: [val[0], val[1], 0],
  fdeliveryCity: this.data.citys[val[1]].code,
  })
  // 防止只有省市的情况
  if (countys.length != 0) {
  that.setData({
   county: cityData[val[0]].sub[val[1]].sub[0].name,
   fdeliveryArea: cityData[val[0]].sub[val[1]].sub[0].code
  })
  } else {
  that.setData({
   county: '',
   fdeliveryArea: ''
  })
  }
  return;
 }
 // 滑动区
 if (val[2] != t[2]) {
  this.setData({
  county: this.data.countys[val[2]].name,
  values: val,
  fdeliveryArea: this.data.countys[val[2]].code
  })
  return;
 }
 }

html

<view class="citypicker" wx:if="{{condition}}">
 <view class="cityheader">
 <view bindtap="open" class="city-cancel">取消</view>
 <view bindtap="open" class="city-true">确定</view>
 </view>
 <picker-view indicator-style="height: 40px;" style="font-size:30rpx; width: 100%; height: 290px;" value="{{value}}" bindchange="bindChange" class="citybody">
 <picker-view-column>
  <view wx:for="{{provinces}}" wx:key="{{item.name}}" wx:code="{{item.code}}" style="line-height: 40px;padding-left:10px;">{{item.name}}</view>
 </picker-view-column>
 <picker-view-column>
  <view wx:for="{{citys}}" wx:key="{{item.name}}" wx:code="{{item.code}}" style="line-height: 40px;padding-left:10px;">{{item.name}}</view>
 </picker-view-column>
 <picker-view-column>
  <view wx:for="{{countys}}" wx:key="{{item.name}}" wx:code="{{item.code}}" style="line-height: 40px;padding-left:10px;">{{item.name}}</view>
 </picker-view-column>
 </picker-view>
</view>

效果图

微信小程序实现选择地址省市区三级联动

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery模板插件 jquery.tmpl 动态ajax扩展
Nov 10 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
Dec 07 Javascript
jquery动态添加删除一行数据示例
Jun 12 Javascript
jquery使用经验小结
May 20 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
全面了解构造函数继承关键apply call
Jul 26 Javascript
原生js仿jquery一些常用方法(必看篇)
Sep 20 Javascript
Javascript 正则表达式校验数字的简单实例
Nov 02 Javascript
Node.js中的require.resolve方法使用简介
Apr 23 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
JS实现处理时间,年月日,星期的公共方法示例
May 31 Javascript
小程序Scroll-view上拉滚动刷新数据
Jun 21 #Javascript
jQuery 移除事件的方法
Jun 20 #jQuery
vue引入静态js文件的方法
Jun 20 #Javascript
详解Vue之计算属性
Jun 20 #Javascript
微信小程序实现多图上传
Jun 19 #Javascript
小程序表单认证布局及验证详解
Jun 19 #Javascript
小程序实现背景音乐播放和暂停
Jun 19 #Javascript
You might like
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
javascript一点特殊用法
2008/05/28 Javascript
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
js实现全选和全不选
2020/07/28 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python集合类型用法分析
2015/04/08 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
Python中属性和描述符的正确使用
2016/08/23 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
python编写分类决策树的代码
2017/12/21 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
python输出数学符号实例
2020/05/11 Python
Pycharm修改python路径过程图解
2020/05/22 Python
python中什么是面向对象
2020/06/11 Python
Python接口自动化测试框架运行原理及流程
2020/11/30 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
人事部专员岗位职责
2014/03/04 职场文书
解除合同协议书
2014/04/17 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书