zoukankan      html  css  js  c++  java
  • 小程序循环多个picker选择器,实现动态增、减

    现象

    循环picker选择器,改变一个下拉框选项,导致全部下拉框选项改变;

    问题

    怎样操作才能实现只改变当前操作的下拉框的值?

    思路

    在js中设置一个数组变量,存储每个picker选择器默认的值;然后根据bingchange获取相应的索引、e.detail.value,根据这些更新数组,重新赋值,然后根据

    数组的索引、值更新相应的picker索引以及值。

    wxml

     1 <block wx:for="{{salesList}}" wx:for-index="index" wx:key="id" wx:for-item="item">
     2       <view class="con_txt">
     3         <view class="con_txt1" style="margin-left:30rpx;140rpx">销售品申请</view>
     4         <view class="con_txt1 con_txt2">
     5           <view class="section">
     6             <picker bindchange="bindPickerChange" value="{{item.option}}" range="{{objectArray}}" range-key="good_name" data-id="{{objectArray[item.option].id}}" data-index="{{index}}">
     7               <view class="picker" style="height:70rpx;position:relative">
     8                 {{objectArray[item.option].good_name}}
     9                 <image src="../Image/select.png" style="40rpx;height:40rpx;position:absolute;left:80%;top:20%;"></image>
    10               </view>
    11             </picker>
    12           </view>
    13         </view>
    14         <view class="con_txt1">
    15           <view class="section2">
    16             <input  value="{{salesList[index].nums}}" name="count" bindinput="numChangeS" data-index="{{index}}" style="text-align:center;height:66rpx !important;padding-top:4rpx;"  placeholder-style="color:#ddd;text-align:center;margin-top: 0px;margin-left:-8rpx" placeholder="数量"/>
    17           </view>
    18         </view>
    19         <button class="btnC" hover-class="none" bindtap="reduceSales" data-index="{{index}}">-</button>
    20       </view>
    21     </block>
    22     <view class="hb" bindtap="addSales">
    23       <image src="../Image/addT.png" style="30rpx;height:30rpx;float:left;margin-left:38%;"></image>
    24       <view class="text3">继续增加商品</view>
    25     </view>

    js

     1 data: {
     2     salesList: []    //定义一个空数组
     3   },
     4 //销售品删除一行
     5   reduceSales: function (e) {
     6     var that = this;
     7     var index = e.currentTarget.dataset.index;
     8     var list = that.data.salesList;
     9     if (list.length === 1) {
    10       return;
    11     }
    12     list.splice(index, 1);
    13     this.setData({
    14       salesList: list
    15     })
    16   },
    17 //点击添加销售品
    18   addSales: function (e) {
    19     var that = this;
    20     var list = that.data.salesList;
    21     var r = /^+?[1-9][0-9]*$/;  //正整数 
    22     var tip = '数量请输入正整数~~';
    23     for (var i = 0; i < list.length; ++i) {
    24       if (list[i].nums <= 0 || !r.test(list[i].nums)) {
    25         wx.showToast({
    26         title: tip,
    27         image: '../Image/error.png',
    28         duration: 2000
    29       });
    30       return;
    31       }
    32     }
    33     var options = this.data.objectArray
    34     this.data.salesList.push({ id: options[0].id, nums: '', option: 0 })  //添加新行的时候nums初始为0
    35     this.setData({
    36       salesList: this.data.salesList
    37     })
    38 
    39   },
    40 //销售品申请类
    41   bindPickerChange: function (e) {
    42     var arr = this.data.objectArray  //数组;
    43    var value = e.detail.value;     //数组子集
    44     var list = this.data.salesList;   //数组传递某一项的容器
    45    var index = e.currentTarget.dataset.index;  //索引
    46 
    47     list[index] = arr[value] //被选中数组的某一项赋给容器的相对应的某一项容器
    48 
    49     list[index].option = value  //数组子集赋给某一项相对应的容器索引
    50   this.setData({
    51       salesList: list
    52     })
    53   },
    54   //申请数量
    55   numChangeS: function (e) {
    56     var _that = this;
    57     var index = e.currentTarget.dataset.index;
    58     var list = this.data.salesList
    59     list[index].nums = e.detail.value
    60     this.setData({
    61       salesList: list
    62     })
    63   },
    64 
    65 // 页面初始化 options为页面跳转所带来的参数
    66   onLoad: function (options) {
    67     var that = this
    68     wx.request({
    69       url: 'https://....',
    70       method: 'GET',
    71       header: { 'content-type': 'application/json' },
    72       data: {},
    73       success: function (res) {   // success
    74         var options = res.data.goods;
    75         that.data.salesList.push({ id: options[0].id, nums: '', option: 0 })
    76         that.data.materielList.push({ id: options[0].id, nums: '', option: 0 })
    77         that.data.activesList.push({ id: options[0].id, option: 0 })
    78         that.setData({
    79           objectArray: options,
    80           salesList: that.data.salesList,
    81         })
    82       },
    83     })
    84   },

    参考网址:https://www.cnblogs.com/JinQing/p/6673665.html

  • 相关阅读:
    LinkedList源码分析
    Hashtable源码分析
    String源码分析
    记一次ArrayList产生的线上OOM问题
    【spring源码分析】IOC容器初始化——查漏补缺(五)
    前端面试的那些事儿(1)~JavaScript 原始数据类型
    前端面试的那些事儿(2)~ 不再害怕被问 JavaScript 对象
    第二周技术周报-前端的自我修养
    第一周技术周报-前端框架演变
    JavaScript数据类型检测 数组(Array)检测方式
  • 原文地址:https://www.cnblogs.com/yanduanduan/p/9072342.html
Copyright © 2011-2022 走看看