<img src=”./img/10_1.gif” width=500>
input
元素,并添加事件监听const checkboxes = document.querySelectorAll('.inbox input[type="checkbox"]')
checkboxes.forEach(item => item.addEventListener('click', handleEvent))
注意:click
事件对象有一个shiftKey属性, 具体请看这里
将问题分解
Wes Bos 提供的解决方案:用一个变量,标记两个checkbox之间的范围
inBetween
为true, 则checkbox 被选中默认inBetween
为false, 也就是说默认情况下checkbox 不会被选中。只有当遇到第一个checkbox, inBetween
会变为true。第一个 checkbox之后的checkbox都会被选中,直到遇到第二个checkbox。这时的inBetween
会变为false,跟默认情况相同checkbox不会被选中。
let lastChecked
function handleEvent(e) {
let inBetween = false
if (e.shiftKey && this.checked) {
checkboxes.forEach(item => {
// 若遇到 B 或 A,则将标记值取反
if (item === this || item === lastChecked) {
inBetween = !inBetween
}
if (inBetween) {
item.checked = true
}
})
}
lastChecked = this // A(选中的第一个checkbox)
}
文章的主要内容来自上面的链接,此文章仅作为我自己的笔记 , 侵权必删。