按下shift + 左鍵 可以圈選多個checkbox
querySelectorAll('.inbox input[type="checkbox"]')
選擇所有checkboxclick
事件監聽觸發function handleCheck()
lastChecked
紀錄點選的checkbox位置inBetween = false
作為選取區間的判斷if(e.shiftKey && this.checked)
if (checkbox == this || checkbox == lastChecked)
inBetween
轉為 true
if(inBetween)
執行 checkbox.checked = true
將區間內的checkbox點選起來// 選取所有checkbox
const checkboxes = document.querySelectorAll('.inbox input[type="checkbox"]');
// 從這個點開始計算
let lastChecked;
// click觸發
function handleCheck(e) {
// 中間的input
let inBetween = false;
// 如果有按下shift
if(e.shiftKey && this.checked) {
console.log('shiftKey checked');
// 所有的checkbox 循環一次
checkboxes.forEach(checkbox => {
// console.log('checkbox:', checkbox);
// console.log('lastChecked:', lastChecked);
// console.log('this:', this);
// 找出中間的input
if (checkbox == this || checkbox == lastChecked) {
inBetween = !inBetween;
console.log('between range-------------------');
}
// 區間內的checkbox 勾選起來
if (inBetween) {
checkbox.checked = true;
}
});
}
lastChecked = this;
}
checkboxes.forEach((checkbox) => {
checkbox.addEventListener('click', handleCheck)
});