实现效果

需求分析

  • 通过shift键实现连续多选功能

    • 按下shift的同时点击A复选框,然后在点击B复选框,A,B之间的复选框都被勾选上
    • 或者是先点击A复选框,再按下shift键点击B复选框,A,B之间的复选框都被勾选上

代码实现

方法一
  • 要实现这个关键在于需要知道A和B之间有多少个选项

    • 使用一个变量isBetween来标记有多少个选项,刚开始isBetween=false

    • 当遇到A和B的时候就对isBetween进行取反

    • 遇到A的时候,isBetween取反等于true

    • 遇到B后,isBetween取反就变成了false

    • 在遇到B之前,通过forEach遍历,遇到了AB之间的元素,由于他们都没有被选中,所以不能进入第一个循环,也就不能改变isBetween的值,

    • 所以在遇到B之前,遍历了n个元素,就有n-1个isBetween为true

    • isBetween为true,让item.checked = true;就能实现选择AB之间的元素了

let lastChecked = null;
function handleCheck(e){let isBetween = false;// 定义变量checkedNum,解决没有任何项被勾选的情况下,按住 Shift 再点击某一项,此项之后的元素都会被选中的问题// 使用checkedNum来记录被勾选上的项// 此时被勾选上的项都是人为点击的// 变量checkedNum是为了解决按下`shift`的同时点击A复选框,然后在点击B复选框这种情况下// 还没点击B,剩下的复选框就全被勾选了let checkedNum = 0;checkboxes.forEach(item => {if (item.checked) {checkedNum++;}});if (e.shiftKey &&  this.checked && checkedNum > 1) {checkboxes.forEach(item => {if (item === this || item === lastChecked) {isBetween = !isBetween;}if (isBetween) {item.checked = true;}})}// 使用lastChecked把第一次点击的input存起来,// 如果首次没有在按下shift键的同时点击input,那么就不会进入到if循环里// 第二次按下shift再点击的时候才进入if循环,这个时候如果不存好第一次点击的this// 就不能判断需要勾选的区间lastChecked = this;
}
方法二

利用数组索引获取需要选中的范围

let onOff = false;
let lastChecked = null;
//  处理方法二:利用数组索引获取需要选中的范围
function handleCheck1(e) {if(!lastChecked) lastChecked = this;onOff = lastChecked.checked ? true : false;if(e.shiftKey) {let start = boxArr.indexOf(this);let end = boxArr.indexOf(lastChecked);boxArr.slice(Math.min(start, end), Math.max(start, end) + 1).forEach(input => input.checked = onOff);}lastChecked = this;
}boxs.forEach(box => box.addEventListener('click', handleCheck1));

Day10 -- JavaScript实现按下 Shift 键后进行多选操作的功能相关推荐

  1. 【ngx-ueditor】百度编辑器按下Shift键不触发contentChange事件

    背景:基于Angular 6,引入ngx-ueditor 发现现象:如果以Shift键+任意键结尾,则ngModel会丢失包含shift键的字符 例如:输入"ABC+AB++++" ...

  2. 黑客攻击最短代码大揭秘!不要问,问就是5下shift键

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨Caesar 来源丨手机电脑双黑客(heike ...

  3. vue el-checkbox按下shift键实现批量选择数据

    目录 1.先看下效果 2.代码分析 1.添加html代码,先将列表写出来 2.初始化数据:给原数据添加index属性 3.设置一个flag记录是否按下了shift键,通过监听键盘按下和松开给flag赋 ...

  4. 0x8000 GetKeyState(VK_SHIFT); 判断是否有按下shift键

    0x8000 & GetKeyState(VK_SHIFT); 这句是判断是否有按下shift键 为什么GetAsyncKeyState()& 首先说明,有好多程序或书上是0x8000 ...

  5. int 9中断例程-;在屏幕中间依次显示'a'~'z',并可以让人看清。 在显示的过程中,按下Esc键后,改变显示的颜色...

    ;在屏幕中间依次显示'a'~'z',并可以让人看清. ;在显示的过程中,按下Esc键后,改变显示的颜色 assume cs:code stack segment db 128 dup(0) stack ...

  6. textbox控件输入内容后按下Enter键后执行button1的click方法

    对于Asp.Net.在TextBox1中输入内容后,按下enter键后,执行Button1的click方法,在page_load事件增加如下代码即可实现: TextBox1.Attributes.Ad ...

  7. windows8怎么关机_按下电源键后发生了什么?电脑是如何关机的?

    在Windows启动后,最自然的关机方式是什么呢?当然是按下电源键了.有没有好奇,当我们按下电源键,会发生什么呢?为什么Windows可以选择关机或者睡眠?背后的机理又是什么呢? 历史 如果你曾经使用 ...

  8. 键盘按下某键 停止运行java_Java:按下“Q”键后终止while循环

    我有下面这个java程序,它在没有while循环的情况下工作正常,但我想运行执行,直到用户从键盘按下Q键.Java:按下"Q"键后终止while循环 那么,什么样的条件应该放在wh ...

  9. 按下 Home 键后发生了什么事?

    后台有位小伙伴分享了一个头条的面试题:按下手机的 Home 键,有哪些动作和事件发生? 今天我们就来分析一下,本文源码基于 Android - 28 事件的分类 安卓系统中的事件,主要有以下几种: 按 ...

最新文章

  1. 解读Go语言的2018:怎么就在中国火成这样了?
  2. 初学__Python——Python 可重用结构:Python模块
  3. zcmu1157: 新年彩灯Ⅱ(二维树状数组)
  4. python pandas dataframe 转json_python-将嵌套的json转换为pandas dataframe
  5. 趣谈设计模式 | 工厂模式(Factory):利用工厂来创建对象
  6. 用Delphi写扬声器音乐
  7. word中取消自动目录超链接的方法
  8. 福音!微信个人公众号可以改名了!
  9. 鼓励生娃!携程创始人梁建章:生1个孩子应重奖100万
  10. Python项目实践:BMI 身体质量指数
  11. [转]bad interpreter:No such file or directory的原因
  12. 程序员如何实现编码黄金标准?
  13. P1090 合并果子
  14. 动态SQL和PL/SQL的EXECUTE IMMEDIATE选项
  15. ubuntu14.04安装ANSYS14.5的血泪史
  16. SMM框架的图片上传
  17. DataGrip连接Mysql报08S01解决方案
  18. WiFi Display 介绍
  19. Python基础篇学习
  20. IIS5、IIS6、IIS7的ASP.net 请求处理过程比较转

热门文章

  1. 浅谈python的垃圾回收机制以及内存管理
  2. js 二叉树图形_JS实现二叉树 - 山海散客 - OSCHINA - 中文开源技术交流社区
  3. STM32F429IGT6项目准备7——使用TouchGFX加载SPIflash内的图片资源
  4. 垃圾回收(GC) 很干,很全
  5. java计算机毕业设计医院管理系统源程序+mysql+系统+lw文档+远程调试
  6. 军犬舆情热点:全球品牌500强华为排十二;北京首个破产法庭成立
  7. UiPath 修改默认浏览器配置「Note」
  8. iOS 高德地图怎么在屏幕内显示所有的Marker?
  9. 魅族android os是什么,基于安卓5.0:新版魅族Flyme OS初体验
  10. 英文、简繁体中文 IT 词汇对照表