微信小程序 ecshop地址三级联动实现实例代码


Posted in Javascript onFebruary 28, 2017

微信小程序 ecshop地址3级联动实现实例代码

picker标签,官方给出的实例:

<view class="section">
 <view class="section__title">地区选择器</view>
 <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
  <view class="picker">
   当前选择:{{array[index]}}
  </view>
 </picker>
</view>

 Page({
 data: {
  array: ['美国', '中国', '巴西', '日本'],
  index: 0,
 },
 bindPickerChange: function(e) {
  console.log('picker发送选择改变,携带值为', e.detail.value)
  this.setData({
   index: e.detail.value
  })
 },
})

wxml页面:

<view class="add-list under-line" >

    <view class="add-lab">收货地址</view>
    <view class="add-text">
      <picker class="w-3" bindchange="bindPickerProvince" value="{{provinceIndex}}" range="{{province}}" >
        <view class="picker">{{province[provinceIndex]}}</view>
      </picker> 
      <picker class="w-3" bindchange="bindPickerCity" value="{{cityIndex}}" range="{{city}}" >
        <view class="picker">{{city[cityIndex]}}</view>
      </picker>
      <picker class="w-3" bindchange="bindPickerDistrict" value="{{districtIndex}}" range="{{district}}" >
        <view class="picker">{{district[districtIndex]}}</view>
      </picker>        
    </view>
  </view>

js页面:

var app = getApp()
Page({
 data:{
  motto: 'jxcat',
  serverUrl: app.globalData.ajaxUrl,
  baseUrl: app.globalData.baseUrl,
  title: "收货地址",
  address_id: "",
  address: "",

  province:[],

  province_id: [], //后台返回的数据对应 region_id city,district 与此相同
  province_name: [], //后台返回的数据对应 region_name
  provinceIndex: 0, //wxml页面选择的选项,从0开始
  provinceId: 0, //根据wxml页面选择的选项获取到province_id: []对应的region_id

  city:[].
  city_id: [],
  city_name: [],
  cityIndex: 0,
  cityId: 0,

  district:[],
  district_id: [],  
  district_name: [],
  districtIndex: 0,
  districtId: 0,
 },
 onLoad:function(options){
  // 页面初始化 options为页面跳转所带来的参数
  var that = this
  var get_data
  wx.checkSession({
   success: function(){
    //登录态未过期
    wx.getStorage({
     key: 'wcx_session',
     success: function(sres) {
       get_data = {
            m: 'api',
            c: 'user' ,
            a: 'edit_address',
            wcx_session: sres.data,
        }
       if(options.act == 'edit'){
         get_data = {
            m: 'api',
            c: 'user' ,
            a: 'edit_address',
            id: options.id,
            wcx_session: sres.data,
        }
       }
       wx.request({
        url: app.globalData.ajaxUrl, 
        data: get_data,
        header: {
          'content-type': 'application/json'
        },
        success: function(res) {
  
          if(options.act == "edit"){
           that.data.provinceId = res.data.consignee.province
           that.data.cityId = res.data.consignee.city
           that.data.districtid = res.data.consignee.district
          }
          for(var i=0; i<res.data.province_list.length; i++){{
           that.data.province_id[i] = res.data.province_list[i].region_id //把region_id存入province_id
           that.data.province_name[i] = res.data.province_list[i].region_name //把region_name存入province_name
           if(res.data.consignee.province == res.data.province_list[i].region_id){
            that.data.provinceIndex = i
           }
          }}
          for(var i=0; i<res.data.city_list.length; i++){{
           that.data.city_id[i] = res.data.city_list[i].region_id
           that.data.city_name[i] = res.data.city_list[i].region_name
           if(res.data.consignee.city == res.data.city_list[i].region_id){
            that.data.cityIndex = i
           }
          }}
          for(var i=0; i<res.data.district_list.length; i++){{
           that.data.district_id[i] = res.data.district_list[i].region_id
           that.data.district_name[i] = res.data.district_list[i].region_name
           if(res.data.consignee.district == res.data.district_list[i].region_id){
            that.data.districtIndex = i
           }
          }}
          that.data.address_id = options.id
          that.setData({
           consignee: res.data.consignee,
           province: that.data.province_name,
           provinceIndex: that.data.provinceIndex,
           city: that.data.city_name,
           cityIndex: that.data.cityIndex,
           district: that.data.district_name,
           districtIndex: that.data.districtIndex
          }) 
        }
       })
       //request
     } 
    })
   },
   fail: function(){
    //登录态过期
    wx.login()
   }
  })
  
 },
 bindPickerProvince: function(event){
  var that = this
  var getId = event.detail.value //获取到wxml选择的选项对应的下标,从0开始
  that.data.provinceId = that.data.province_id[getId] //根据获取到的下标获取到region_name对应的region_id
  wx.request({
   url: app.globalData.ajaxUrl, 
   data: {
    m: 'api',
    c: 'public' ,
    a: 'region',
    rtype: 2,
    rparent: that.data.provinceId,
   },
   header: {
     'content-type': 'application/json'
   },
   success: function(res){
    for(var i=0; i<res.data.regions.length; i++){{
     that.data.city_id[i] = res.data.regions[i].region_id
     that.data.city_name[i] = res.data.regions[i].region_name
    }}
    that.setData({
      city: that.data.city_name,
      provinceIndex: getId,
     }) 
   },
   
  })
 },
 bindPickerCity: function(event){
  var that = this
  var getId = event.detail.value
  that.data.cityId = that.data.city_id[getId]
  wx.request({
   url: app.globalData.ajaxUrl, 
   data: {
    m: 'api',
    c: 'public' ,
    a: 'region',
    rtype: 3,
    rparent: that.data.cityId,
   },
   header: {
     'content-type': 'application/json'
   },
   success: function(res){
    for(var i=0; i<res.data.regions.length; i++){{
     that.data.district_id[i] = res.data.regions[i].region_id
     that.data.district_name[i] = res.data.regions[i].region_name
    }}
    that.setData({
      district: that.data.district_name,
      cityIndex: getId,
     }) 
   },
   
  })
 },
 bindPickerDistrict: function(event){
   var that = this
   var getId = event.detail.value
   that.data.districtId = that.data.district_id[getId]
   that.setData({
      districtIndex: getId,
   }) 
 },
 formSubmit: function(event) {
  var that = this
  wx.checkSession({
   success: function(){
    //登录态未过期
    wx.getStorage({
     key: 'wcx_session',
     success: function(sres) {
       wx.request({
        url: app.globalData.ajaxUrl, 
        data: {
         m: 'api',
         c: 'user' ,
         a: 'add_address',
         address_id: that.data.address_id,
         province: that.data.provinceId, // wxml页面选择的地址对应的 region_id
         city: that.data.cityId,
         district: that.data.districtId,
         address: event.detail.value.address,
         consignee: event.detail.value.consignee,
         mobile: event.detail.value.mobile,
         zipcode: event.detail.value.zipcode,
         wcx_session: sres.data,
        }, 
        header: {
          'content-type': 'application/json'
        },
        
        success: function(res) {
          console.log(res)
          wx.redirectTo({
                url: 'address'
            })
        }
       })
       //request
     } 
    })
   },
   fail: function(){
    //登录态过期
    wx.login()
   }
  })
 },


  
})

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
运算符&amp;&amp;的三个不同层次
Apr 07 Javascript
点击显示指定元素隐藏其他同辈元素的方法
Feb 19 Javascript
Javascript加载速度慢的解决方案
Mar 11 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
javascript每日必学之封装
Feb 23 Javascript
简单实现js页面切换功能
Jan 10 Javascript
JS实现的系统调色板完整实例
Dec 21 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
vue-router实现webApp切换页面动画效果代码
May 25 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
JavaScript设计模式之装饰者模式实例详解
Jan 17 Javascript
Jquery Datatables的使用详解
Jan 30 jQuery
简单实现AngularJS轮播图效果
Apr 10 #Javascript
ie下js不执行的几种可能
Feb 28 #Javascript
jquery中绑定事件的异同
Feb 28 #Javascript
JS常见算法详解
Feb 28 #Javascript
vue.js树形组件之删除双击增加分支实例代码
Feb 28 #Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
Feb 28 #Javascript
jQuery中的on与bind绑定事件区别实例详解
Feb 28 #Javascript
You might like
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
PHP 快速排序算法详解
2014/11/10 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
用Python给文本创立向量空间模型的教程
2015/04/23 Python
Python标准库defaultdict模块使用示例
2015/04/28 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
Python 调用Java实例详解
2017/06/02 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
Python之修改图片像素值的方法
2019/07/03 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
护理自荐信
2013/10/22 职场文书
医药个人求职信范文
2014/01/29 职场文书
环保倡议书500字
2014/05/15 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python
MySQL 语句执行顺序举例解析
2022/06/05 MySQL
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技