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


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 相关文章推荐
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
Jun 29 Javascript
js禁止小键盘输入数字功能代码
Aug 01 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
Jul 22 Javascript
移动端js触摸事件详解
Sep 18 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 Javascript
vue-router实现组件间的跳转(参数传递)
Nov 07 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
Nov 23 Javascript
node.js实现带进度条的多文件上传
Mar 27 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
详解JavaScript原型与原型链
Nov 16 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHP之数组学习
2011/05/29 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
Python下线程之间的共享和释放示例
2015/05/04 Python
Python编程中的异常处理教程
2015/08/21 Python
Python正规则表达式学习指南
2016/08/02 Python
Python小进度条显示代码
2019/03/05 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
python实现网页录音效果
2020/10/26 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
电子商务专业推荐信范文
2013/12/02 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
清洁工个人工作总结
2015/03/05 职场文书
七夕情人节问候语
2015/11/11 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
一文搞懂php的垃圾回收机制
2021/06/18 PHP
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL