*개인 기록용이며 부족한 부분이 있을 수 있습니다.
동일한 name 값을 가진 checkbox를 전체 체크 및 전체 체크 해제하는 checkbox를 만드려고 한다. (이하 checkAllBtn)
이때 추가로 다른 checkbox를 체크해제하면 checkAllBtn은 check 해제 처리하고자 한다.
결과 모습은 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* 전체선택 checkbox */
function checkAllBoxes() {
let checkboxes = document.getElementsByName(this.getAttribute('name'));
checkboxes.forEach((checkbox) => {
checkbox.checked = this.checked;
})
}
/* 개별선택 checkbox */
function checkOneBox(box) {
let checkAllBtn = document.getElementById(box.getAttribute('name')+'CheckAll');
console.log(box)
if ( box.checked == false ) {
// 전체 체크 해제
checkAllBtn.checked = false;
}
}
|
cs |
checkAllBoxes(): checkAllBtn을 체크할때 실행될 함수이고
checkOneBox(): 이외에 개별 checkbox를 체크할 때 실행
( checkAllBoxes 의 ID는 '공통 name 값'+ CheckAll 로 한다.)
함수는 onclick이 아닌 eventListener 방식으로 하려고 하는데
개별 checkbox에 특정 class를 부여하고 eventListener를 추가하고자 한다면 아래와 같이 querySeletorAll과 forEach문을 사용할 수 있다.
(예시: tab 클래스의 요소를 클릭하면 openTab 함수를 실행한다.)
1
2
3
4
|
let tabs = document.querySelectorAll(".tab");
tabs.forEach((tab) => {
tab.addEventListener('click', openTab);
});
|
cs |
그러나 위 방식은 동적으로 추가된 요소는 적용할 수 없다.
위 테이블은 조회 필터를 통해 동적으로 불러오도록 할 예정이기 때문에 아래와 같은 방법을 사용할 있다.
1
2
3
4
5
6
7
8
|
/* eventListener */
document.getElementById('rgntCheckAll').addEventListener('click', checkAllBoxes);
document.getElementById('rgntHTbl').addEventListener('click', function(e){
if ( e.target && e.target.classList.contains('rgnt_check') ){
console.log('c!')
checkOneBox(e.target);
}
});
|
cs |
맨 위 함수에서 checkAllBoxes는 this를, checkOneBox는 별도 인자를 사용한 이유가 여기 있다.
checkOneBox의 this는 테이블(# rgntHTbl )이 된다.
'JavaScript' 카테고리의 다른 글
[JavaScript] 인쇄 시 페이지 방향(레이아웃) 강제하기 (0) | 2024.03.21 |
---|---|
[JavaScript] 매개변수로 함수 받아 eventListener 추가하기 (layer popup 공통 코드 만들기) (1) | 2024.02.12 |
[ScrollTrigger] start 옵션에 대하여 (초간단) (0) | 2023.04.26 |
[Scolltrigger] fade-in 효과 적용 시 이슈(잠깐 나타났다 fade-in 동작) (0) | 2023.04.24 |
나의 Parallax 적용기.. [GSAP 사용] (0) | 2023.03.30 |