[JS, Jquery] 체크박스 script

2023. 2. 28. 22:15·Frontend/JavaScript & Jquery
<input type="checkbox" id="check-all"> 전체 선택

<input type="checkbox" class="check-item" value="1"> 첫번째 항목
<input type="checkbox" class="check-item" value="2"> 두번째 항목
<input type="checkbox" class="check-item" value="3"> 세번째 항목

 

JavaScript 작성

// 전체 선택 체크박스의 이벤트 핸들러
document.getElementById("check-all").addEventListener("change", function() {
  // 전체 선택 체크박스가 선택되었을 때
  if (this.checked) {
    // 모든 개별 체크박스를 선택 상태로 변경
    Array.from(document.getElementsByClassName("check-item")).forEach(function(item) {
      item.checked = true;
    });
  }
  // 전체 선택 체크박스가 선택 해제되었을 때
  else {
    // 모든 개별 체크박스를 선택 해제 상태로 변경
    Array.from(document.getElementsByClassName("check-item")).forEach(function(item) {
      item.checked = false;
    });
  }
});

// 개별 선택 체크박스의 이벤트 핸들러
Array.from(document.getElementsByClassName("check-item")).forEach(function(item) {
  item.addEventListener("change", function() {
    // 모든 개별 체크박스가 선택되었을 때
    if (document.querySelectorAll(".check-item:checked").length === document.querySelectorAll(".check-item").length) {
      // 전체 선택 체크박스를 선택 상태로 변경
      document.getElementById("check-all").checked = true;
    }
    // 개별 체크박스 중 하나라도 선택이 해제되었을 때
    else if (!this.checked) {
      // 전체 선택 체크박스를 선택 해제 상태로 변경
      document.getElementById("check-all").checked = false;
    }
  });
});

 

Jquery 작성

// 전체 선택 체크박스의 이벤트 핸들러
$("#check-all").change(function() {
  // 전체 선택 체크박스가 선택되었을 때
  if ($(this).is(":checked")) {
    // 모든 개별 체크박스를 선택 상태로 변경
    $(".check-item").prop("checked", true);
  }
  // 전체 선택 체크박스가 선택 해제되었을 때
  else {
    // 모든 개별 체크박스를 선택 해제 상태로 변경
    $(".check-item").prop("checked", false);
  }
});

// 개별 선택 체크박스의 이벤트 핸들러
$(".check-item").change(function() {
  // 모든 개별 체크박스가 선택되었을 때
  if ($(".check-item:checked").length === $(".check-item").length) {
    // 전체 선택 체크박스를 선택 상태로 변경
    $("#check-all").prop("checked", true);
  }
  // 개별 체크박스 중 하나라도 선택이 해제되었을 때
  else if (!$(this).is(":checked")) {
    // 전체 선택 체크박스를 선택 해제 상태로 변경
    $("#check-all").prop("checked", false);
  }
});

 

객체지향 class를 이용해서 작성

class CheckboxManager {
  constructor() {
    this.checkAllCheckbox = document.getElementById("check-all");
    this.checkItemCheckboxes = Array.from(document.getElementsByClassName("check-item"));
    this.bindEventHandlers();
  }

  bindEventHandlers() {
    this.checkAllCheckbox.addEventListener("change", () => this.handleCheckAllChange());
    this.checkItemCheckboxes.forEach(checkbox => checkbox.addEventListener("change", () => this.handleCheckItemChange()));
  }

  handleCheckAllChange() {
    if (this.checkAllCheckbox.checked) {
      this.checkItemCheckboxes.forEach(checkbox => checkbox.checked = true);
    } else {
      this.checkItemCheckboxes.forEach(checkbox => checkbox.checked = false);
    }
  }

  handleCheckItemChange() {
    if (this.checkItemCheckboxes.every(checkbox => checkbox.checked)) {
      this.checkAllCheckbox.checked = true;
    } else {
      this.checkAllCheckbox.checked = false;
    }
  }
}

const checkboxManager = new CheckboxManager();
반응형

'Frontend > JavaScript & Jquery' 카테고리의 다른 글

[JS, Jquery] 요소의 속성, 프로퍼티 값  (0) 2023.03.07
[JS 디자인패턴] 전략패턴 (Strategy Pattern)  (1) 2023.03.01
Element.insertAdjacentHTML()  (2) 2022.12.25
null과 undefined  (0) 2022.12.07
[ES6] Spread Operator (전개 구문)  (0) 2022.05.22
'Frontend/JavaScript & Jquery' 카테고리의 다른 글
  • [JS, Jquery] 요소의 속성, 프로퍼티 값
  • [JS 디자인패턴] 전략패턴 (Strategy Pattern)
  • Element.insertAdjacentHTML()
  • null과 undefined
전예방
전예방
  • 전예방
    예방이의 개발일기
    전예방
  • 전체
    오늘
    어제
    • All (125)
      • Info & Tip (2)
      • 유용한 사이트들 (5)
      • Mark Up & StyleSheet (23)
        • HTML (6)
        • CSS & SCSS (10)
        • 반응형 (6)
      • Frontend (66)
        • 전체 (10)
        • JavaScript & Jquery (18)
        • TypeScript (0)
        • React (26)
        • Next.js (3)
        • 성능최적화 (2)
        • 웹접근성 (2)
      • Backend (13)
        • Python (1)
        • JAVA (2)
        • node.js (0)
        • PHP (7)
        • 패키지매니저 (3)
      • Markdown (0)
      • SCM (1)
        • Git&Github (1)
        • SVN (0)
      • IDE (4)
        • VSCode (2)
        • IntelliJ (1)
        • Ecplise (1)
      • 취미생활 (3)
      • 정보처리기사 (2)
      • 코딩자율학습단 (5)
        • 12기 (파이썬) (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

    • velog
    • github
  • 공지사항

  • 인기 글

  • 태그

    파이썬
    관리자 페이지
    Python
    반응형
    CSS
    TypeScript
    코딩자율학습
    회원가입
    NPM
    swiper.js
    php
    yarn berry
    나도코딩
    React Swiper
    Admin
    코딩자율학습단
    frontend
    리액트
    Chart.js
    react
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
전예방
[JS, Jquery] 체크박스 script
상단으로

티스토리툴바