반응형
input type="checkbox" 체크박스 체크여부로 인한 JS 제작
작업중에 checkbox가 체크가 안되어있을 때, 경고문 뜨도록하는 작업이 들어왔다.
간단할 줄 알았는데 생각보다 로직이 은근 꼬여서 이번 기회에 어떻게 해결했는지 메모하려고 한다.
이런것들이 다 나의 피와 살, 토양과 영양분, 커리어와 연봉이 되거라며.. 연봉 incease(가즈아 🚀)!!!
[ HMTL ]
<div class="checkbox-part">
<label for="all"><input type="checkbox" id="all" value="all" /> 전체</label>
<label for="image"><input type="checkbox" id="image" value="image" /> Image</label>
<label for="exel"><input type="checkbox" id="exel" value="exel" /> Exel</label>
<label for="ppt"><input type="checkbox" id="ppt" value="ppt" /> PPT</label>
<label for="word"><input type="checkbox" id="word" value="word" /> Word</label>
</div>
<div class="search-part">
<input id="searchKey" type="text" value="" title="검색어입력" placeholder="파일 검색">
<button type="button" class="button-search">seach</button>
</div>
[ JavaScript Version 01 ]
// search input이랑 button 부분
const searchInput = document.querySelector('#searchKey');
const searchButton = document.querySelector('.button-search');
// check박스 모여있는 부분
const checkPart = document.querySelector('.checkbox-part');
const checkboxes = checkPart.querySelectorAll('input');
searchButton.addEventListener('click', (e) => {
e.preventDefault();
let value = searchInput.value; // input 안에 텍스트 value 값
if (value === '') alert('검색어를 입력하세요.')
// value 값이 없으면 '검색어 입력하라'는 문구 알람 띄우기
//💥여기서 에러가 터짐💥
for (let i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked === false) { // 체크박스를 돌려서 체크안됐으면
alert('검색할 파일 형태를 선택하세요.') // '체크박스 선택하라'는 알람 띄우기
}
// 💥💥 한번 알람이 떠야하는데 5번 알람뜸....💥💥
}
});
[ Error 발생과 수정사항 ]
1. 체크박스가 모두 unchecked면 alert 알람이 한번 띄워야하는데, 체크박스 개수만큼 여러번 뜬다.
2. 함수로 모듈화해서 다른곳에서도 필요할 때 쓸 수 있도록 수정하고 싶다.
HOW TO CHANHED
[ JavaScript Version 02 ]
const searchInput = document.querySelector('#searchKey');
const searchButton = document.querySelector('.button-search');
searchButton.addEventListener('click', (e) => {
e.preventDefault();
AlertCheckbox() // all unchecked 일 때, 이 함수 소환!
EnterSearchWords(); // input에 value 없을 때, 이 함수 소환!
})
//😍 input no word 함수
function EnterSearchWords(){
let value = searchInput.value;
if( value === '') alert('검색어를 입력하세요.')
}
//😍 ALL NO checked 함수
function AlertCheckbox(){
const checkPart = document.querySelector('.checkbox-part');
const checkboxes = checkPart.querySelectorAll('input');
//😍 이렇게 바꿨어요!
for( let i = 0; i < checkboxes.length; i ++){
if(checkboxes[i].checked === true) return;
// 체크박스 돌다가 checked가 있으면 바로 return!!
}
alert('검색할 파일 형태를 선택하세요.');
// 체크없으면 바로 return해서 alert 띄우기!
}
1. 첫번째 문제였던 체크박스 개수만큼 뜨는 현상.
반복문(for문) 돌려서 체크박스가 unchecked이면 alert 떠라고 설정했더니,
[ i ] 값이 하나씩 들어가면서 legnth 갯수만큼 여러번 뜨는 형상이 나타났었다...
그래서 생각을 전환시켜서 checked가 있으면 바로 return 통해 밖으로 빠져나가도록 작업을 해봤다.
반복문을 돌려서 checked가 있으면 바로 return으로 끝⭐!!
unchecked이면 for문으로 다 돌린다음에 자연스럽게 alert() 경고문을 1번 불러온다.
- 끝 -
반응형
'작업 피드백 > 개발' 카테고리의 다른 글
[리팩토링] 아카이빙 페이지 유지보수 중 데이터 DRY 이슈 정리 (0) | 2024.04.09 |
---|---|
[Git] 늘 멘붕터지는 push 완료한 commit 되돌리기 - reset 사용 (0) | 2024.03.21 |
순수 Javascript 이용해서 그래프 만들기 (0) | 2022.02.22 |
제이쿼리&CSS 말줄임 스크립트로 처리하는 방법 / Ellipsis Using Css & J-query (0) | 2021.05.18 |
CSS사용해서 HTML 툴팁(tooltip) 구현하기 (0) | 2021.05.13 |