带快捷键的批量操作(按下shift键批量改变复选框的值)

<template>
  <ul class="checkbox-wrapper">
    <li :class="{'false-msg': !item}" v-for="(item, i) in data" :key="i">
      <input v-model="data[i]" type="checkbox" @click="sectionCompute($event,i)">
      {{item}}
    </li>
  </ul>
</template>

<script>
  export default {
    name: "text",
    data () {
      return {
        data: [true, true, true, true, true, true, true, true, true, true, true, true, true, true],
        isLastChecked: false,
        preI: -1,
      }
    },
    methods: {
      sectionCompute (e, i) {
        let vm = this;
        if(e.shiftKey && vm.isLastChecked) { //第二次摁下shift键
          vm.isLastChecked = false;     //将前一次摁下记录清空
          let k = 0;
          let firStatus = true;
          // if(vm.data[vm.preI] == vm.data[i]) {  //两次选中值不一样则不做批量处理
          //   return;
          // }
          if (i > vm.preI) {
            firStatus = vm.data[vm.preI];
            for (k = vm.preI; k < i + 1; k++) {
              vm.data[k] = firStatus;
            }
          } else if (i < vm.preI) {
            firStatus = vm.data[vm.preI];
            for (k = i; k < vm.preI + 1; k++) {
              vm.data[k] = firStatus;
            }
          }
        } else if (e.shiftKey && !vm.isLastChecked) { //第一次摁下shift键
          vm.isLastChecked = true;  //第一次摁下shift
          vm.preI = i;
        } else {
          vm.isLastChecked = false;  //将前一次摁下记录清空
          vm.data[i] = !vm.data[i];
        }
      },
    }
  }
</script>

<style scoped>
  .checkbox-wrapper {
    width: 256px;
    margin: 20px auto;
  }
  .false-msg {
    text-decoration:line-through
  }
</style>

效果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值