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


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英文日期(有时间)选择器
May 02 Javascript
javascript form 验证函数 弹出对话框形式
Jun 23 Javascript
用JS写的一个TableView控件代码
Jan 23 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 Javascript
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
jquery siblings获取同辈元素用法实例分析
Jul 25 Javascript
jquery easyUI中ajax异步校验用户名
Aug 19 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
JS为什么说async/await是generator的语法糖详解
Jul 11 Javascript
javascript使用链接跨域下载图片
Nov 01 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
Nov 06 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
python提取字典key列表的方法
2015/07/11 Python
Python进程间通信Queue消息队列用法分析
2019/05/22 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
《长征》教学反思
2014/04/27 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
社团招新宣传语
2015/07/13 职场文书
Spring整合Mybatis的全过程
2021/06/28 Java/Android
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js
Java中API的使用方法详情
2022/04/06 Java/Android
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL