<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>이용약관</title>
<!-- css 파일을 불러오는 코드 -->
<!-- 아이콘 사용을 위한 Font Awesome 6 CDN -->
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
<!-- 구글 웹 폰트 사용을 위한 CDN -->
<!-- 내가 만든 CSS 파일-->
<link rel="stylesheet" type="text/css" href="./css/reset.css">
<link rel="stylesheet" type="text/css" href="./css/commons.css">
<link rel="stylesheet" type="text/css" href="./css/test.css">
<style>
</style>
<!-- javascript 작성 공간 -->
<script>
function refreshCheckbox(tag) {
//<계획>
//1. 체크된 체크박스를 확인
//2-1. 전체가 체크된 경우 개별항목을 모두 체크
//2-2. 개별항목이 체크된경우 전체 체크여부를 확인
//console.log(tag);
//console.log(tag.classList);
//console.log(tag.classList.contains("check-item"));
if(tag.classList.contains("check-all")) {//2-1
var itemList = document.querySelectorAll(".check-item");
var allList = document.querySelectorAll(".check-all");
//tag의 체크 상태에 따라 allList와 itemList를 모두 체크/해제
for(var i=0; i < itemList.length; i++) {
itemList[i].checked = tag.checked;
}
for(var i=0; i < allList.length; i++) {
allList[i].checked = tag.checked;
}
//버튼 처리
var btn = document.querySelector("#next-btn");
btn.disabled = !tag.checked;
}
else if(tag.classList.contains("check-item")) {//2-2
//개별항목이 모두 체크되어 있는지를 알아야 함
//- itemList - 전체 체크박스 목록
//- checkedItemList - 체크된 체크박스 목록
var itemList = document.querySelectorAll(".check-item");
var checkedItemList = document.querySelectorAll(".check-item:checked");
var allChecked = itemList.length == checkedItemList.length;
var allList = document.querySelectorAll(".check-all");
for(var i=0; i < allList.length; i++) {
allList[i].checked = allChecked;
}
//버튼 처리
var btn = document.querySelector("#next-btn");
btn.disabled = !allChecked;
}
}
</script>
</head>
<body>
<div class="container w-600">
<div class="row">
<h1>이용약관</h1>
</div>
<div class="row left">
<label>
<input type="checkbox" class="check-all" oninput="refreshCheckbox(this)"> 모두 동의합니다
</label>
</div>
<div class="row left">
<textarea class="form-input w-100" readonly>dummy text</textarea>
</div>
<div class="row left">
<label>
<input type="checkbox" class="check-item" oninput="refreshCheckbox(this)"> 동의합니다
</label>
</div>
<div class="row left">
<textarea class="form-input w-100" readonly>dummy text</textarea>
</div>
<div class="row left">
<label>
<input type="checkbox" class="check-item" oninput="refreshCheckbox(this)"> 동의합니다
</label>
</div>
<div class="row left">
<textarea class="form-input w-100" readonly>dummy text</textarea>
</div>
<div class="row left">
<label>
<input type="checkbox" class="check-item" oninput="refreshCheckbox(this)"> 동의합니다
</label>
</div>
<div class="row left">
<textarea class="form-input w-100" readonly>dummy text</textarea>
</div>
<div class="row left">
<label>
<input type="checkbox" class="check-item" oninput="refreshCheckbox(this)"> 동의합니다
</label>
</div>
<hr>
<div class="row left">
<label>
<input type="checkbox" class="check-all" oninput="refreshCheckbox(this)"> 모두 동의합니다
</label>
</div>
<div class="row">
<button class="btn btn-positive w-100" disabled
id="next-btn">다음 단계로 이동</button>
</div>
</div>
</body>
</html>
'Javascript' 카테고리의 다른 글
이벤트 콜백(callback) (0) | 2023.09.26 |
---|---|
예상 결제 금액 계산 (1) | 2023.09.25 |
체크박스 제어 (0) | 2023.09.21 |
내장객체 연산방법 (0) | 2023.09.20 |
자바스크립트 내장 객체 (0) | 2023.09.18 |