亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序實現商品屬性聯動選擇

2020-03-21 16:01:57
字體:
來源:轉載
供稿:網友

本文實例為大家分享了微信小程序實現商品屬性聯動選擇的具體代碼,供大家參考,具體內容如下

效果演示:

微信小程序,商品,聯動選擇

代碼示例

1、commodity.xml

<!-- <view class="title">屬性值聯動選擇</view>  --><!--options--><view class="commodity_attr_list">   <!--每組屬性-->  <view class="attr_box" wx:for="{{attrValueList}}" wx:for-item="attrValueObj" wx:for-index="attrIndex">    <!--屬性名-->   <view class="attr_name">{{attrValueObj.attrKey}}</view>     <!--屬性值-->   <view class="attr_value_box">      <!--每個屬性值-->     <view class="attr_value {{attrIndex==firstIndex || attrValueObj.attrValueStatus[valueIndex]?(value==attrValueObj.selectedValue?'attr_value_active':''):'attr_value_disabled'}}" bindtap="selectAttrValue" data-status="{{attrValueObj.attrValueStatus[valueIndex]}}"     data-value="{{value}}" data-key="{{attrValueObj.attrKey}}" data-code="{{attrCode}}" data-index="{{attrIndex}}" data-selectedvalue="{{attrValueObj.selectedValue}}" wx:for="{{attrValueObj.attrValues}}" wx:for-item="value" wx:for-index="valueIndex">{{value}}</view>    </view>  </view> </view> <!--button--><view class="weui-btn-area">   <button class="weui-btn" bindtap="submit">選好了    </button> </view> 

上述代碼把頁面盒子分為兩部分commodity_attr_list和weui-btn-area。 
commodity_attr_list:循環獲取商品的屬性名和相對應的屬性值,并布局頁面。 
weui-btn-area:提交校驗并獲取選中商品屬性結果。

2、commodity.js

數據結構

//數據結構:以一組一組的數據來進行設定   commodityAttr: [   {    priceId: 1,    price: 35.0,    "stock": 8,    "attrValueList": [     {      "attrKey": "規格:",      "attrValue": "+免費配料",      "attrCode": "1001"     },     {      "attrKey": "甜度:",      "attrValue": "七分甜",      "attrCode": "2001"     },     {      "attrKey": "加料:",      "attrValue": "珍珠",      "attrCode": "3001"     },     {      "attrKey": "冰塊:",      "attrValue": "少冰",      "attrCode": "4001"     }    ]   },   {    priceId: 2,    price: 35.1,    "stock": 9,    "attrValueList": [     {      "attrKey": "規格:",      "attrValue": "+燕麥",      "attrCode": "1002"     },     {      "attrKey": "甜度:",      "attrValue": "五分甜",      "attrCode": "2002"     },     {      "attrKey": "加料:",      "attrValue": "椰果",      "attrCode": "3002"     },     {      "attrKey": "冰塊:",      "attrValue": "去冰",      "attrCode": "4002"     }    ]   },   {    priceId: 3,    price: 35.2,    "stock": 10,    "attrValueList": [     {      "attrKey": "規格:",      "attrValue": "+布丁",      "attrCode": "1003"     },     {      "attrKey": "甜度:",      "attrValue": "無糖",      "attrCode": "2003"     },     {      "attrKey": "加料:",      "attrValue": "仙草",      "attrCode": "3003"     },     {      "attrKey": "冰塊:",      "attrValue": "常溫",      "attrCode": "4003"     }    ]   },   {    priceId: 4,    price: 35.2,    "stock": 10,    "attrValueList": [     {      "attrKey": "規格:",      "attrValue": "再加一份奶霜",      "attrCode": "1004"     },     {      "attrKey": "甜度:",      "attrValue": "無糖",      "attrCode": "2003"     },     {      "attrKey": "加料:",      "attrValue": "仙草",      "attrCode": "3004"     },     {      "attrKey": "冰塊:",      "attrValue": "熱飲",      "attrCode": "4004"     }    ]   },   {    priceId: 5,    price: 35.2,    "stock": 10,    "attrValueList": [     {      "attrKey": "規格:",      "attrValue": "+免費配料",      "attrCode": "1004"     },     {      "attrKey": "甜度:",      "attrValue": "五分甜",      "attrCode": "2003"     },     {      "attrKey": "加料:",      "attrValue": "椰果",      "attrCode": "3004"     },     {      "attrKey": "冰塊:",      "attrValue": "常溫",      "attrCode": "4004"     }    ]   }  ],  attrValueList: [] }

屬性選中和取消選擇效果處理

onShow: function () {  this.setData({   includeGroup: this.data.commodityAttr  });  this.distachAttrValue(this.data.commodityAttr);  // 只有一個屬性組合的時候默認選中   // console.log(this.data.attrValueList);   if (this.data.commodityAttr.length == 1) {   for (var i = 0; i < this.data.commodityAttr[0].attrValueList.length; i++) {    this.data.attrValueList[i].selectedValue = this.data.commodityAttr[0].attrValueList[i].attrValue;   }   this.setData({    attrValueList: this.data.attrValueList   });  } }, /* 獲取數據 */ distachAttrValue: function (commodityAttr) {  /**   將后臺返回的數據組合成類似   {   attrKey:'型號',   attrValueList:['1','2','3']   }   */  // 把數據對象的數據(視圖使用),寫到局部內   var attrValueList = this.data.attrValueList;  // 遍歷獲取的數據   for (var i = 0; i < commodityAttr.length; i++) {   for (var j = 0; j < commodityAttr[i].attrValueList.length; j++) {    var attrIndex = this.getAttrIndex(commodityAttr[i].attrValueList[j].attrKey, attrValueList);    // console.log('屬性索引', attrIndex);     // 如果還沒有屬性索引為-1,此時新增屬性并設置屬性值數組的第一個值;索引大于等于0,表示已存在的屬性名的位置     if (attrIndex >= 0) {     // 如果屬性值數組中沒有該值,push新值;否則不處理      if (!this.isValueExist(commodityAttr[i].attrValueList[j].attrValue, attrValueList[attrIndex].attrValues)) {      attrValueList[attrIndex].attrValues.push(commodityAttr[i].attrValueList[j].attrValue);     }    } else {     attrValueList.push({      attrKey: commodityAttr[i].attrValueList[j].attrKey,      attrValues: [commodityAttr[i].attrValueList[j].attrValue]     });    }   }  }  // console.log('result', attrValueList)   for (var i = 0; i < attrValueList.length; i++) {   for (var j = 0; j < attrValueList[i].attrValues.length; j++) {    if (attrValueList[i].attrValueStatus) {     attrValueList[i].attrValueStatus[j] = true;    } else {     attrValueList[i].attrValueStatus = [];     attrValueList[i].attrValueStatus[j] = true;    }   }  }  this.setData({   attrValueList: attrValueList  }); }, getAttrIndex: function (attrName, attrValueList) {  // 判斷數組中的attrKey是否有該屬性值   for (var i = 0; i < attrValueList.length; i++) {   if (attrName == attrValueList[i].attrKey) {    break;   }  }  return i < attrValueList.length ? i : -1; }, isValueExist: function (value, valueArr) {  // 判斷是否已有屬性值   for (var i = 0; i < valueArr.length; i++) {   if (valueArr[i] == value) {    break;   }  }  return i < valueArr.length; }, /* 選擇屬性值事件 */ selectAttrValue: function (e) {  /*   點選屬性值,聯動判斷其他屬性值是否可選   {   attrKey:'型號',   attrValueList:['1','2','3'],   selectedValue:'1',   attrValueStatus:[true,true,true]   }   console.log(e.currentTarget.dataset);   */  var attrValueList = this.data.attrValueList;  var index = e.currentTarget.dataset.index;//屬性索引   var key = e.currentTarget.dataset.key;  var value = e.currentTarget.dataset.value;  if (e.currentTarget.dataset.status || index == this.data.firstIndex) {   if (e.currentTarget.dataset.selectedvalue == e.currentTarget.dataset.value) {    // 取消選中     this.disSelectValue(attrValueList, index, key, value);   } else {    // 選中     this.selectValue(attrValueList, index, key, value);   }   } }, /* 選中 */ selectValue: function (attrValueList, index, key, value, unselectStatus) {  // console.log('firstIndex', this.data.firstIndex);   var includeGroup = [];  if (index == this.data.firstIndex && !unselectStatus) { // 如果是第一個選中的屬性值,則該屬性所有值可選    var commodityAttr = this.data.commodityAttr;   // 其他選中的屬性值全都置空    // console.log('其他選中的屬性值全都置空', index, this.data.firstIndex, !unselectStatus);    for (var i = 0; i < attrValueList.length; i++) {    for (var j = 0; j < attrValueList[i].attrValues.length; j++) {     attrValueList[i].selectedValue = '';    }   }  } else {   var commodityAttr = this.data.includeGroup;  }   // console.log('選中', commodityAttr, index, key, value);   for (var i = 0; i < commodityAttr.length; i++) {   for (var j = 0; j < commodityAttr[i].attrValueList.length; j++) {    if (commodityAttr[i].attrValueList[j].attrKey == key && commodityAttr[i].attrValueList[j].attrValue == value) {     includeGroup.push(commodityAttr[i]);    }   }  }  attrValueList[index].selectedValue = value;   // 判斷屬性是否可選   for (var i = 0; i < attrValueList.length; i++) {   for (var j = 0; j < attrValueList[i].attrValues.length; j++) {    attrValueList[i].attrValueStatus[j] = false;   }  }  for (var k = 0; k < attrValueList.length; k++) {   for (var i = 0; i < includeGroup.length; i++) {    for (var j = 0; j < includeGroup[i].attrValueList.length; j++) {     if (attrValueList[k].attrKey == includeGroup[i].attrValueList[j].attrKey) {      for (var m = 0; m < attrValueList[k].attrValues.length; m++) {       if (attrValueList[k].attrValues[m] == includeGroup[i].attrValueList[j].attrValue) {        attrValueList[k].attrValueStatus[m] = true;       }      }     }    }   }  }  // console.log('結果', attrValueList);   this.setData({   attrValueList: attrValueList,   includeGroup: includeGroup  });   var count = 0;  for (var i = 0; i < attrValueList.length; i++) {   for (var j = 0; j < attrValueList[i].attrValues.length; j++) {    if (attrValueList[i].selectedValue) {     count++;     break;    }   }  }  if (count < 2) {// 第一次選中,同屬性的值都可選    this.setData({    firstIndex: index   });  } else {   this.setData({    firstIndex: -1   });  } }, /* 取消選中 */ disSelectValue: function (attrValueList, index, key, value) {  var commodityAttr = this.data.commodityAttr;  attrValueList[index].selectedValue = '';   // 判斷屬性是否可選   for (var i = 0; i < attrValueList.length; i++) {   for (var j = 0; j < attrValueList[i].attrValues.length; j++) {    attrValueList[i].attrValueStatus[j] = true;   }  }  this.setData({   includeGroup: commodityAttr,   attrValueList: attrValueList  });   for (var i = 0; i < attrValueList.length; i++) {   if (attrValueList[i].selectedValue) {    this.selectValue(attrValueList, i, attrValueList[i].attrKey, attrValueList[i].selectedValue, true);   }  } }

結果提交

submit: function () {  var value = [];  for (var i = 0; i < this.data.attrValueList.length; i++) {   if (!this.data.attrValueList[i].selectedValue) {    break;   }   value.push(this.data.attrValueList[i].selectedValue);  }  if (i < this.data.attrValueList.length) {   wx.showToast({    title: '請選擇完整!',    icon: 'loading',    duration: 1000   })  } else {   var valueStr = "";   for(var i = 0;i < value.length;i++){    console.log(value[i]);    valueStr += value[i]+",";   }   wx.showModal({    title: '提示',    content: valueStr,    success: function (res) {     if (res.confirm) {      console.log('用戶點擊確定')     } else if (res.cancel) {      console.log('用戶點擊取消')     }    }   })    console.log(valueStr);  } }

3、commodity.wxss

.title {  padding: 10rpx 20rpx;  margin: 10rpx 0;  border-left: 4rpx solid #ccc; }  /*全部屬性的主盒子*/.commodity_attr_list {  background: #fff;  padding: 0 20rpx;  font-size: 26rpx;  overflow: hidden;  width: 100%; } /*每組屬性的主盒子*/.attr_box {  width: 100%;  overflow: hidden;  border-bottom: 1rpx solid #ececec;  display: flex; flex-direction: column;} /*屬性名*/.attr_name {  width: 20%;  float: left;  padding: 15rpx 0; } /*屬性值*/.attr_value_box {  width: 80%;  float: left;  padding: 15rpx 0;  overflow: hidden; } /*每個屬性值*/.attr_value {  float: left;  padding: 0 30rpx;  margin: 10rpx 10rpx;  border: 1rpx solid #ececec;  border-radius:5px; line-height:30px;} /*每個屬性選中的當前樣式*/.attr_value_active {  border-radius: 10rpx;  color: #0089dc;  padding: 0 30rpx;  border: 1rpx solid #0089dc;  /* background: #fff;  */} /*禁用屬性*/.attr_value_disabled {  color: #ccc; }  /*button*/.weui-btn-area {  margin: 1.17647059em 15px 0.3em; } .weui-btn{ width: 80%; height: 100rpx; border-radius: 3rpx;  background-color:#0089dc;  color: #fff; }

好了,復制上述代碼就可以實現效果哦,趕緊試試吧!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97婷婷大伊香蕉精品视频| 91精品国产综合久久久久久久久| 欧美精品激情视频| 国产亚洲日本欧美韩国| 青青青国产精品一区二区| 欧美日韩国产精品一区| 欧美激情亚洲视频| 91豆花精品一区| 久久久午夜视频| 亚洲另类xxxx| 国产精品一区二区三区在线播放| 欧美午夜www高清视频| 欧美激情一区二区三区在线视频观看| 91探花福利精品国产自产在线| 亚洲欧美视频在线| 国产欧美日韩最新| 国产一区二区av| 亚洲欧美在线看| 久久久久免费精品国产| 国产一区二区免费| 久久免费视频这里只有精品| 欧美性xxxx极品hd满灌| 欧美激情精品久久久久久久变态| 国产成人精品免高潮费视频| 亚洲日韩第一页| 乱亲女秽乱长久久久| 欧美乱大交xxxxx另类电影| 日韩在线观看免费av| 久久99精品久久久久久青青91| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久天天躁狠狠躁夜夜躁2014| 国产大片精品免费永久看nba| 国产成人综合一区二区三区| 日本精品视频在线观看| 精品久久国产精品| 国内精品久久久久久久| 国产精品丝袜久久久久久高清| 欧美日韩国产一区二区| 精品福利免费观看| 欧美极度另类性三渗透| 亚洲美腿欧美激情另类| 欧美高清电影在线看| 欧美在线观看一区二区三区| 久久青草精品视频免费观看| 亚洲精品一区中文字幕乱码| 久久人人爽人人爽人人片av高清| 亚洲性线免费观看视频成熟| 国产mv免费观看入口亚洲| 国产美女久久久| 久久久久久九九九| 92福利视频午夜1000合集在线观看| 欧美精品成人91久久久久久久| 久久精品99久久香蕉国产色戒| 精品视频在线播放色网色视频| 欧美有码在线观看视频| 久久久免费高清电视剧观看| 日韩精品欧美激情| 日韩中文字幕在线| 国产精品福利无圣光在线一区| 国产精品偷伦视频免费观看国产| 欧美高清视频一区二区| 激情成人在线视频| 日韩www在线| 免费不卡在线观看av| 精品人伦一区二区三区蜜桃网站| 亚洲激情视频在线| 日韩精品免费综合视频在线播放| 午夜精品久久久久久久99黑人| 国产成人精品久久二区二区91| 81精品国产乱码久久久久久| 亚洲自拍偷拍第一页| 国产91热爆ts人妖在线| 亚洲大胆人体视频| 亚洲精品av在线| 亚洲国产欧美一区| 中文字幕日韩视频| 91中文字幕在线| 国产精品久久国产精品99gif| 黑人巨大精品欧美一区二区三区| 欧美成人三级视频网站| 久久久久久久久网站| 91久久精品美女高潮| 欧美激情一区二区三级高清视频| 伊人久久久久久久久久久| 国外成人在线直播| 国产精品爱啪在线线免费观看| 国语自产在线不卡| 欧美日韩成人在线播放| 91啪国产在线| 欧美精品18videos性欧| 色噜噜亚洲精品中文字幕| 中文字幕欧美日韩在线| 国产成人涩涩涩视频在线观看| 色无极影院亚洲| 欧美激情网站在线观看| 久久久久国产精品www| 57pao国产成人免费| 亚洲一区二区三区乱码aⅴ| 91产国在线观看动作片喷水| 日本不卡高字幕在线2019| 在线不卡国产精品| 国产精品稀缺呦系列在线| 欧美成人激情视频| 久久久久九九九九| 川上优av一区二区线观看| 亚洲精品视频在线播放| 日韩成人激情视频| 欧美日韩国产丝袜美女| 中文一区二区视频| 欲色天天网综合久久| www.欧美精品一二三区| 69国产精品成人在线播放| 97在线视频免费播放| 日韩一区二区久久久| 成人黄色av免费在线观看| 欧美激情一级二级| 欧美激情网友自拍| 国产精品激情av在线播放| 欧美成人免费全部观看天天性色| 91视频国产高清| 色妞色视频一区二区三区四区| 中文字幕欧美精品日韩中文字幕| 国产综合福利在线| 这里只有精品丝袜| 久久久久久久久久久免费| 日韩高清a**址| xxxx性欧美| 亚洲精品一区久久久久久| 精品久久久香蕉免费精品视频| 国产精品免费在线免费| 国模视频一区二区| 亚洲精品电影在线| 奇米一区二区三区四区久久| 91精品国产91久久久久久久久| 日韩电影在线观看免费| 97成人精品视频在线观看| 久久久久久网址| 国内精品久久影院| 欧美在线免费看| 精品国产一区av| 亚洲无线码在线一区观看| 亚洲精品久久久久中文字幕欢迎你| 精品福利一区二区| 久久福利网址导航| 日韩一区二区三区在线播放| 亚洲香蕉在线观看| 91久久精品国产91久久性色| 欧美一级片久久久久久久| 欧美精品999| 国产日韩在线一区| 亚洲精品国产美女| 91av福利视频| 欧美在线精品免播放器视频| 中日韩美女免费视频网站在线观看| 国产精品久久久久9999| 欧美寡妇偷汉性猛交| 国产日韩欧美另类| 欧洲美女7788成人免费视频| 中文字幕亚洲天堂| 国产精品露脸av在线| 91嫩草在线视频| 亚洲jizzjizz日本少妇| 亚洲精品美女久久| 91在线观看免费高清|