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


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 相关文章推荐
javascript Discuz代码中的msn聊天小功能
May 25 Javascript
一个js控制的导航菜单实例代码
Dec 03 Javascript
JavaScript中按位“异或”运算符使用介绍
Mar 14 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
深入理解JavaScript中的对象复制(Object Clone)
May 18 Javascript
js插件Jcrop自定义截取图片功能
Oct 14 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
Dec 17 Javascript
Material(包括Material Icon)在Angular2中的使用详解
Feb 11 Javascript
JavaScript设计模式之代理模式简单实例教程
Jul 03 Javascript
Vue 开发必须知道的36个技巧(小结)
Oct 09 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 Javascript
js获取url页面id,也就是最后的数字文件名
Sep 25 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
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
用Python实现命令行闹钟脚本实例
2016/09/05 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
浅析Python 多行匹配模式
2020/07/24 Python
学习Python需要哪些工具
2020/09/04 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
集体婚礼证婚词
2014/01/13 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
介绍信范文
2015/01/31 职场文书
清明节主题班会
2015/08/14 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书