1. checkboxes
<div class="inbox">
<div class="item">
<input type="checkbox" />
<p>This is an inbox layout.</p>
</div>
<div class="item">
<input type="checkbox" />
<p>Check one item</p>
</div>
- inbox라는 박스안에 각 checkbox가 존재.
2. e.shiftKey
const checkboxes = document.querySelectorAll(
'.inbox input[type="checkbox"]'
);
let lastChecked;
function handlecheck(e) {
let inBetween = false;
if (e.shiftKey && this.checked) {
checkboxes.forEach((checkbox) => {
if (checkbox === this || checkbox === lastChecked) {
inBetween = !inBetween;
}
if (inBetween) {
checkbox.checked = true;
}
});
}
lastChecked = this;
}
checkboxes.forEach((checkbox) =>
checkbox.addEventListener("click", handlecheck)
);
- checkbox들을 queryselector로 묶는다.
- 결국 맨 아래 클릭 이벤트를 통해 handlecheck함수를 실행시키고
- click으로 발생한 이 이벤트는 shiftKey를 누른상태에서 checked가 발생하면
- 각각의 checkbox들에 대해 체크한 부분부터 마지막 체크한 부분까지(this는 click event) inBetween을 false에서 true로 바꾸고 true로 바뀐 checkbox의 checked속성을 true로 바꾼다.
- 이에따라 최초클릭과 마지막 클릭 사이의 elements들에 대해 forEach반복으로 전부 checked=true속성을 가지게된다.
'frontend > JavaScript' 카테고리의 다른 글
[JS30] 6. Type Ahead 추가공부. 비동기 API호출 fetch, Promise, async await, 정규표현식 Regexp (0) | 2021.10.25 |
---|---|
[JS30][Browser] #15 Local Storage (0) | 2021.10.24 |
[JS] 자바 스크립트 30개 미니 프로젝트 만들기 -9. Dev_Tools_Domination (0) | 2021.09.09 |
[JS] 자바 스크립트 30개 미니 프로젝트 만들기 -8. HTML5 Canvas (0) | 2021.09.08 |
[JS] 자바 스크립트 30개 미니 프로젝트 만들기 -7. Array Cardio : some, every, find, findIndex, slice (0) | 2021.09.06 |