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


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 encodeURI和encodeURIComponent的比较
Apr 03 Javascript
js实现快速分享功能(你的文章分享工具)
Jun 25 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
jQuery中data()方法用法实例
Dec 27 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
Bootstrap CSS布局之表单
Dec 17 Javascript
jQuery+pjax简单示例汇总
Apr 21 jQuery
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
Angular2 自定义validators的实现方法
Jul 05 Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
Dec 09 Javascript
Vue + ts实现轮播插件的示例
Nov 10 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实现的二分查找算法示例
2017/06/20 PHP
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
jqTransform美化表单
2015/10/10 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
Node.JS文件系统解析实例详解
2017/05/15 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
vue生成token并保存到本地存储中
2018/07/17 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
一些Solaris面试题
2013/03/22 面试题
热能动力工程毕业生自荐信
2013/11/07 职场文书
质量承诺书范文
2014/03/27 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
给领导敬酒词
2015/08/12 职场文书
学习心理学心得体会
2016/01/22 职场文书