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


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 相关文章推荐
一段实时更新的时间代码
Jul 07 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
Sep 21 Javascript
JS正则中的RegExp对象对象
Nov 07 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
Jul 15 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
May 10 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
May 16 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
详解如何在vue中使用sass
Jun 21 Javascript
Vue 3.0 全家桶抢先体验
Apr 28 Javascript
Postman环境变量全局变量使用方法详解
Aug 13 Javascript
vue 插槽简介及使用示例
Nov 19 Vue.js
小程序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
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
js 操作select相关方法函数
2009/12/06 Javascript
jQuery图片轮播的具体实现
2013/09/11 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
js实现无缝轮播图
2020/03/09 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
使用python画社交网络图实例代码
2019/07/10 Python
pytorch实现查看当前学习率
2020/06/24 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
百度JavaScript笔试题
2015/01/15 面试题
咖啡蛋糕店创业计划书
2014/01/28 职场文书
小学信息技术教学反思
2014/02/10 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
新闻人物通讯稿
2014/10/09 职场文书
个人先进材料范文
2014/12/30 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
win7配置本地ftp服务器的图文教程
2022/08/05 Servers