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


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 相关文章推荐
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
Jun 08 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
Feb 28 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
May 25 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
Jun 06 Javascript
Asp.Net之JS生成分页条的方法
Nov 23 Javascript
Node.js连接postgreSQL并进行数据操作
Dec 18 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
ES6中参数的默认值语法介绍
May 03 Javascript
关于Vue.nextTick()的正确使用方法浅析
Aug 25 Javascript
js和jquery判断数据类型的4种方法总结
Aug 28 jQuery
nuxt.js写项目时增加错误提示页面操作
Nov 05 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脚本的10个技巧(3)
2006/10/09 PHP
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
将python代码和注释分离的方法
2018/04/21 Python
利用python画出折线图
2018/07/26 Python
老生常谈python中的重载
2018/11/11 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
python中with用法讲解
2020/02/07 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
俄罗斯女装店:12storeez
2019/10/25 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
小学教师自我鉴定
2013/11/07 职场文书
企业法人授权委托书
2014/09/25 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
旅游项目合作意向书
2015/05/08 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
python微信智能AI机器人实现多种支付方式
2022/04/12 Python