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


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 相关文章推荐
基于prototype扩展的JavaScript常用函数库
Nov 30 Javascript
js Event对象的5种坐标
Sep 12 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
Jun 20 Javascript
jQuery基础语法实例入门
Dec 23 Javascript
jQuery scrollFix滚动定位插件
Apr 01 Javascript
AngularJS学习第一篇 AngularJS基础知识
Feb 13 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
May 04 Javascript
从零开始学习搭建React脚手架项目
Aug 23 Javascript
js实现计时器秒表功能
Dec 16 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
基于javascript实现放大镜特效
Dec 03 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
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
Using the TextRange Object
2006/10/14 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
vscode 远程调试python的方法
2017/12/01 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
Django添加feeds功能的示例
2018/08/07 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
python在不同条件下的输入与输出
2020/02/13 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
python 错误处理 assert详解
2020/04/20 Python
详细的大学生创业计划书模板
2014/01/27 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
英文自荐信范文
2015/03/25 职场文书
承诺书的签字人,需不需要承担相应的责任?
2019/07/09 职场文书
导游词之天津古文化街
2019/11/09 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
JavaScript的function函数详细介绍
2021/11/20 Javascript