三个一行的多选框组

公司需要实现三行一组的多选框,类似于底下的效果,这是我最初实现的,结果显而易见,被驳回了,理由就是我下面圈红框的部分,看着奇怪,不满足要求的三个一行

这种实现很简单,就使用了elmentui的布局组件,设置了每个宽度为三分之一,然后把数据做个遍历就行

 <el-checkbox-group
              v-model="productGroups"
            >
              <el-row :gutter="20">
                <el-col
                  v-for="item in productGroup"
                  :key="item.value"
                  :span="8"
                  ><div class="grid-content">
                    <el-checkbox :label="item.value">{{
                      item.label
                    }}</el-checkbox>
                  </div></el-col
                >
              </el-row>
            </el-checkbox-group>

这就是我上面最初版的代码,由于布局组件全部在一个el-row里的浮动会自动填充,但是我的高度不一定都是一样的,所以会出现下面这种效果。

有的人会不会想,既然是高度不一样,那你设置高度一样不就完了吗?

我刚开始也是这么想的,但是我又想到了,我们的项目是会国际化的,我不能保证其他语言的高度是多少,通过设置高度的思路不太现实,可能反而更复杂。

最终还是老老实实的,每一行都要有个el-row,然后把这些label数组改成一个二维数组,这样就保险了,

这是修改后的效果,上代码

数据处理成二维数组:

    // 产品组
    productGroup() {
      let arr = Dic.find('DIC040')
      arr = arr.map((item) => {
        return {
          label: item.value + item.label,
          value: item.value,
        }
      })
      // 将数组处理成二维数组,每个数组包含3个元素
      const result = []
      for (let i = 0; i < arr.length; i += 3) {
        result.push(arr.slice(i, i + 3))
      }
      return result
    },

HTML

   <el-checkbox-group v-model="productGroups">
              <el-row
                v-for="(childArr, index) in productGroup"
                :key="index"
                :gutter="20"
              >
                <el-col
                  v-for="item in childArr"
                  :key="item.value"
                  :span="8"
                  ><div class="grid-content">
                    <el-checkbox :label="item.value">{{
                      item.label
                    }}</el-checkbox>
                  </div></el-col
                >
              </el-row>
            </el-checkbox-group>

要使用jQuery操作一复选框(假设这复选框每一行三个),可以采用以下方式: ### HTML 示例 创建一具有三个复选框的HTML结构: ```html <div id="checkboxGroup"> <div class="row"> <input type="checkbox" name="group[]" value="item1"> 项1<br> <input type="checkbox" name="group[]" value="item2"> 项2<br> <input type="checkbox" name="group[]" value="item3"> 项3<br> </div> <!-- 更多行 --> </div> ``` ### jQuery 示例 接着,在JavaScript部分使用jQuery选择这些复选框并添加事件处理器: ```javascript $(document).ready(function(){ // 获取当前行的索引 function getRowIndex(element){ return $(element).closest('.row').index(); } // 全部选中或取消选中同一行内的所有复选框 $('#checkboxGroup input[type="checkbox"]').on('click', function(){ var rowIndex = getRowIndex(this); var checkboxesInRow = $('#checkboxGroup .row:eq('+ rowIndex +') input[type="checkbox"]'); if (this.checked) { checkboxesInRow.prop('checked', true); } else { checkboxesInRow.prop('checked', false); } }); // 批量获取同一行内复选框的值 $('#getValuesButton').click(function(){ var rowIndex = getRowIndex($('.activeCheckbox')); var values = []; $('#checkboxGroup .row:eq('+ rowIndex +') input[type="checkbox"]:checked').each(function(){ values.push($(this).val()); }); alert('Selected Values: ' + values.join(', ')); }); }); ``` 在这个示例中: 1. **事件处理**:当单击任一复选框时,会检测其所在的行索引,然后改变该行内所有复选框的状态。 2. **获取行内复选框值**:点击一个按钮触发事件,找到当前活动的复选框所在的行,然后收集并显示这一行内已选中复选框的值。 ### 相关问题: 1. 如何在不刷新页面的情况下更改复选框的状态? 2. 是否能用jQuery实现更复杂的逻辑,比如在选择某个项目时自动加载更多相关数据? 3. 有没有办法让复选框的值在服务器端进行验证或处理?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值