iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微信小程序复选框组件使用详解
  • 764
分享到

微信小程序复选框组件使用详解

2024-04-02 19:04:59 764人浏览 安东尼
摘要

在工作中频繁用到复选框,于是自己写了个组件,增加其复用性,提高效率。先看效果图: 提交后得到一个选中项的id组成的数组 下边直接上代码: 代码地址为:components/chec

在工作中频繁用到复选框,于是自己写了个组件,增加其复用性,提高效率。
先看效果图:

提交后得到一个选中项的id组成的数组

下边直接上代码:

代码地址为:components/checkGrop/checkGrop

wxml:

<fORM bindsubmit="formSubmit">
  <view class='content'>
  <!-- 一级菜单 -->
    <scroll-view class='scrollLeft' scroll-y>
      <block wx:for="{{list}}" wx:key="item">
        <view class="leftBox" catchtap='ontap' data-index='{{index}}' style='{{n==index?"border-left:8rpx solid #1aad16;color:#1aad16":""}}'>
          {{item.istitle}}
          <view class='num' hidden="{{checked[index].length>0?false:true}}">
            <text>{{allNum[index]?allNum[index]:(checked[index].length>0?checked[index].length:0)}}</text>
          </view>
        </view>
      </block>
    </scroll-view>
    <!-- 二级菜单 -->
    <scroll-view class='scrollRight' scroll-y>
      <view class="weui-cells weui-cells_after-title">
      <!-- 二级菜单中的全部选项 -->
        <label class="weui-cell weui-check__label" catchtap='all'>
          <checkbox class="weui-check" value="{{childlist[n][0].value}}" checked="{{childlist[n][0].checked}}" />
          <view class="weui-cell__hd weui-check__hd_in-checkbox">
            <icon class="weui-icon-checkbox_circle" type="circle" size="23" wx:if="{{!childlist[n][0].checked}}"></icon>
            <icon class="weui-icon-checkbox_success" type="success" size="23" wx:if="{{childlist[n][0].checked}}"></icon>
          </view>
          <view class="weui-cell__bd">{{childlist[n][0].istitle}}</view>
        </label>
        <checkbox-group bindchange="checkboxChange">
        <!-- 二级菜单中的剩余选项 -->
          <block wx:for="{{childlist[n]}}" wx:key="value">
            <label class="weui-cell weui-check__label" wx:if='{{item.istitle!="全部"}}'>
              <checkbox class="weui-check" value="{{item.id}}" checked="{{item.checked}}" />
 
              <view class="weui-cell__hd weui-check__hd_in-checkbox">
                <icon class="weui-icon-checkbox_circle" type="circle" size="23" wx:if="{{!item.checked}}"></icon>
                <icon class="weui-icon-checkbox_success" type="success" size="23" wx:if="{{item.checked}}"></icon>
              </view>
              <view class="weui-cell__bd">{{item.istitle}}</view>
            </label>
          </block>
        </checkbox-group>
      </view>
    </scroll-view>
  </view>
  <view class="btn-area">
    <button catchtap='back'>返回</button>
    <button formType="submit">提交</button>
  </view>
</form>

wxss:

page{
  background: #f8f8f8;
}
.content{
  position: absolute;
  top:0;
  bottom:100rpx; 
  width: 100%;
}
.scrollLeft{
  box-sizing: border-box;
  float: left;
  width: 25%;
  height: 100%;
  border-right: 1rpx solid #DDD;
  font-size: 35rpx;
}
.scrollRight{
  float: left;
  width: 75%;
  height: 100%;
}
.leftBox{
  position: relative;
  box-sizing: border-box;
  width: 100%;
  height: 100rpx;
  display: flex;
  justify-content: center;
  align-items:center;
  border-bottom: 1rpx solid #ddd;
}
.num{
  position: absolute;
  top:10rpx;
  right: 10rpx;
  width: 30rpx;
  height: 30rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #f10215;
  border-radius: 50%;
  color: white;
  font-size: 22rpx;
}
.rightBox{
  box-sizing: border-box;
  width: 100%;
}
.weui-cells {
  position: relative;
  margin-top: 1.17647059em;
  background-color: #FFFFFF;
  line-height: 1.41176471;
  font-size: 17px;
}
.weui-cells_after-title {
  margin-top: 0;
}
.weui-cell {
  padding: 10px 15px;
  position: relative;
  display: -WEBkit-box;
  display: -webkit-flex;
  display: flex;
  -webkit-box-align: center;
  -webkit-align-items: center;
          align-items: center;
}
.weui-check__label:active {
  background-color: #ECECEC;
}
.weui-check {
  position: absolute;
  left: -9999px;
}
.weui-check__hd_in-checkbox {
  padding-right: 0.35em;
}
.weui-icon-checkbox_circle,
.weui-icon-checkbox_success {
  margin-left: 4.6px;
  margin-right: 4.6px;
}
.weui-cell__bd {
  -webkit-box-flex: 1;
  -webkit-flex: 1;
          flex: 1;
}
.btn-area{
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 100rpx;
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 20rpx;
}
.btn-area>button:first-child{
  width: 30%;
  height: 80%;
  color: white;
  background-color: orange;
  display: flex;
  justify-content: center;
  align-items: center;
}
.btn-area>button:last-child{
  width: 65%;
  height: 80%;
  color: white;
  background-color: #1aad16;
  display: flex;
  justify-content: center;
  align-items: center;
}

JSON:

{
  "component":true
}

js:

Component({
  properties: {
    list: {
      type: Array,
      value: [],
    },
    select:{
      type: Array,
      value: [],
    }
  },
  data: {
    childlist: [], 
    n: 0,
    checked: [],
    allNum: [],
  },
  ready(){
    var that=this;
    var list = that.data.list;//传递过来的数据
    // console.log(list)
    var select = that.data.select;
    var checked = new Array;
    var allNum = []; 
      var aaa = [];
      // 检查默认选中状态
      for (let i = 0; i < list.length; i++) {
        for (let k = 0; k < list[i].childlist.length; k++) {
          for (let j = 0; j < select.length; j++) {
            if (list[i].childlist[k].id == select[j]) {
              aaa = [];
              // 若某条二级数组中存在多个选中的项要做判断筛选
              if (checked[i]) {
                // check中第i项如果存过值,那么将在此项中继续加入值
                checked[i].forEach(function (item) {
                  aaa.push(item);
                })
                aaa.push(list[i].childlist[k]);
                checked[i] = aaa;
              } else {
                // check中第i项没有存过值,那么将值存入第i项
                if (list[i].childlist[k].istitle == "全部") {
                  for (let s = 0; s < list[i].childlist.length; s++) {
                    list[i].childlist[s].checked = true
                    allNum[i] = list[i].childlist.length - 1;
                    checked[i] = [list[i]];
                  }
                } else {
                  checked[i] = [list[i].childlist[k]];
                }
 
              }
              list[i].childlist[k].checked = true;
            }
          }
        }
      }
    
    that.setData({
      'childlist[0]': list[0].childlist,
      list: list,
      checked: checked,
      allNum: allNum,
    })
    console.log(checked);
    console.log(allNum);
  },
  methods: {
    ontap(e) {
      var that = this;
      var n = e.currentTarget.dataset.index;
      var childlist = "childlist[" + n + "]";
      that.setData({
        [childlist]: that.data.list[n].childlist,
        n: n
      })
    },
    all() {
      var that = this;
      var n = that.data.n;
      var childlist = "childlist[" + n + "]";
      var checked = "checked[" + n + "]";
      var allNum = "allNum[" + n + "]";
      var all = "";
      var checkArr = [];
      var checkboxItems = that.data.childlist[n];
      if (checkboxItems[0].checked) {
        checkboxItems[0].checked = true;
        checkArr = [];
      } else {
        checkboxItems[0].checked = false;
        // checkArr.push(checkboxItems[0])
        checkArr.push(that.data.list[n])
        all = checkboxItems.length - 1;
      }
      checkboxItems[0].checked = !checkboxItems[0].checked
      for (let k = 1; k < checkboxItems.length; k++) {
        checkboxItems[k].checked = checkboxItems[0].checked;
      }
      console.log(checkboxItems);
 
      that.setData({
        [childlist]: checkboxItems,
        [checked]: checkArr,
        [allNum]: all ? all : 0,
      }, function () {
        console.log(that.data.checked);
      })
    },
    checkboxChange(e) {
      var that = this;
      var n = that.data.n;
      console.log('checkbox发生change事件,携带value值为:', e.detail.value)
      var checkboxItems = that.data.childlist[n];
      var values = e.detail.value;
      var flag = "";
      var childlist = "childlist[" + n + "]";
      var checked = "checked[" + n + "]";
      var allNum = "allNum[" + n + "]";
      var checkedArr = [];
      var all = "";
 
      for (var i = 0, lenI = checkboxItems.length; i < lenI; ++i) {
        checkboxItems[i].checked = false;
        for (var j = 0, lenJ = values.length; j < lenJ; ++j) {
          if (checkboxItems[i].id == values[j]) {
            checkboxItems[i].checked = true;
            checkedArr.push(checkboxItems[i]);
            break;
          }
        }
      }
      if (values.length == checkboxItems.length - 1) {
        checkboxItems[0].checked = true;
        // checkedArr = [checkboxItems[0]];
        checkedArr = [that.data.list[n]];
        all = checkboxItems.length - 1;
      }
      this.setData({
        [childlist]: checkboxItems,
        [checked]: checkedArr,
        [allNum]: all
      });
      // console.log(checkedArr)
    },
    formSubmit: function (e) {
      var that = this;
      console.log('form发生了submit事件');
      var values = that.data.checked;
      var arr = [];
      var arr1 = [];
      for (let i = 0; i < values.length; i++) {
        if (values[i] != undefined) {
          arr.push(values[i]);
        }
      }
 
      for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr[i].length; j++) {
          arr1.push(arr[i][j])
        }
      }
      console.log(arr1);//选中的值
      var detail = arr1;
 
      this.triggerEvent("formSubmit", detail);
    },
    back() {
      this.triggerEvent("back");
    }
  }
})

使用方法:

在需要使用的页面的json中声名启用组件

如:

{
  "usinGComponents": {
    "check": "/components/checkGrop/checkGrop"
  }
}

然后在需要使用的页面的wxml中使用自己起的组件名就好了

如:

<check list="{{hangye}}" select="{{checkedid}}" bind:formSubmit="formSubmit" bindback="back"></check>

其中list 是你要往组件里传递的数组。 select为默认选中的的数据的id,组件里边的参数可以根据自己的需求更换!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 微信小程序复选框组件使用详解

本文链接: https://www.lsjlt.com/news/154076.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序复选框组件使用详解
    在工作中频繁用到复选框,于是自己写了个组件,增加其复用性,提高效率。先看效果图: 提交后得到一个选中项的id组成的数组 下边直接上代码: 代码地址为:components/chec...
    99+
    2024-04-02
  • 微信小程序单选框组应用详解
    本文实例为大家分享了微信小程序单选框组应用的具体代码,供大家参考,具体内容如下 需求概述 有一个核选项数组,里面存放着核选项名称、内容、ID、选择状态。选择状态有未选择、符合、不符合...
    99+
    2024-04-02
  • 微信小程序弹窗组件使用详解
    介绍 最近在开发小程序应用, 发现小程序当中有关于组件的介绍非常的少, 当前自己做的项目当中,有出现过这种情况, 所以自己就封装了一个小程序的弹窗组件, 现在把自己的心得分享给大家,...
    99+
    2024-04-02
  • 微信小程序下拉框组件如何使用
    今天小编给大家分享一下微信小程序下拉框组件如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。小程序有时需要使用下拉框选项...
    99+
    2023-07-02
  • 微信小程序自定义复选框
    本文实例为大家分享了微信小程序自定义复选框的具体代码,供大家参考,具体内容如下 1、效果  2、wxml <checkbox-group bindchange="c...
    99+
    2024-04-02
  • 微信小程序下拉框组件使用方法
    小程序有时需要使用下拉框选项,通常我会使用 picker 组件实现。pick 组件使用 mode 来区分类别,默认使用普通选择器就行。 除了上述方式,我们也可以通过自定义组件实现,代...
    99+
    2024-04-02
  • 微信小程序表单组件单选框radio怎么用
    这篇文章主要介绍了微信小程序表单组件单选框radio怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序表单组件单选框radio怎么用文章都会有所收获,下面我们一起来看看吧。微信小程序单选框radio...
    99+
    2023-06-26
  • 微信小程序常用表单组件的使用详解
    目录1、常用表单组件1.1button1.2checkbox1.3input1.4label1.5form1.6radio1.7slider1.8switch1.9textarea2...
    99+
    2024-04-02
  • 【微信小程序】常用组件及基本使用详解
    🖐本节学习目标: ✅学会使用常用的组件 文章目录 1.常用的容器类组件的使用1.view组件的基本使用2.scroll-view组件的基本使用3.swiper和swiper-item组件的基本使用 2.常用的...
    99+
    2023-08-17
    微信小程序 小程序
  • 微信小程序选择器组件picker怎么使用
    本篇内容介绍了“微信小程序选择器组件picker怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!picker组件的定义picker组件...
    99+
    2023-07-05
  • 微信小程序常用视图容器组件使用详解
    目录1、组件概述2、常用的试图容器组件2.1 view2.2 scroll-view2.3 swiper1、组件概述 组件是视图层基本的组成单元,具备UI风格样式以及特定的功能效果。...
    99+
    2024-04-02
  • 微信小程序日期选择器使用详解
    本文实例为大家分享了微信小程序日期选择器的具体代码,供大家参考,具体内容如下 需求:在小程序开发中,时常会遇到日期选择器、时间选择器或者地区选择器来进行选择的功能。往往设计图上面并不...
    99+
    2024-04-02
  • 微信小程序swiper轮播图组件使用方法详解
    本文实例为大家分享了微信小程序swiper轮播图组件的使用,供大家参考,具体内容如下 在components中新建文件夹swiper components/swiper/swiper...
    99+
    2024-04-02
  • 微信小程序怎么自定义复选框
    本篇内容介绍了“微信小程序怎么自定义复选框”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果 wxml<checkbox-g...
    99+
    2023-07-02
  • 微信小程序中使用vant组件库(超详细)
    目录 前言Vant Weapp的安装与使用1、安装 node.js2、通过 npm 安装3、修改 app.json4、修改 project.config.json5、构建 npm 包6、使用组...
    99+
    2023-09-12
    微信小程序 小程序 前端 npm
  • 微信小程序--》你真的了解小程序组件的使用吗?
    🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:微信小程序 🚲座右铭:人生亦可燃烧,亦可腐败,我愿燃烧,耗尽...
    99+
    2023-09-27
    微信小程序 前端 小程序
  • 微信小程序progress组件怎么使用
    微信小程序中的progress组件用于显示进度条,可以用来展示加载、上传等进度。以下是使用progress组件的步骤: 在wxml...
    99+
    2024-04-09
    微信小程序 progress
  • 【微信小程序开发】一文带你详解小程序组件和 API 的使用
    引言 在小程序开发中,组件和API是非常重要的部分,它们可以帮助我们构建丰富的用户界面和实现各种功能。本文将介绍小程序中常用的组件和API,并提供相应的代码示例。 文章目录 引言组件文本组件图片组件按钮组件输入框组件列表组件 ...
    99+
    2023-08-20
    小程序 微信小程序 前端 原力计划
  • 微信小程序全局文件的使用详解
    目录全局文件总结我们前边两篇介绍了账号的申请、注册,工具的安装,云服务的开通。本篇我们介绍一下基础语法。介绍的方法呢我们会结合上微搭低代码的工具一起做个对比。因为低代码工具也产生了非...
    99+
    2022-11-13
    微信小程序全局文件 小程序全局文件
  • 微信小程序---组件通信---使用selectComponent获取组件实例
    微信小程序—组件通信—使用selectComponent获取组件实例 子组件component wxml {{count}} js properties: {count:Number }, methods: {addCount(){...
    99+
    2023-08-18
    微信小程序 小程序 前端
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作