Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- React & Redux로 시작하는 웹 프로그래밍
- 리액트
- 객체지향
- redux
- 무료리액트강의
- 내일배움카드
- 코딩
- CSS
- 반응형 이메일
- K디지털기초역량훈련
- bucket list
- 반응형
- 이메일 코딩
- free react course
- react
- 패스트캠퍼스
- 버킷리스트
- 자바스크립트
- 바이트디그리
- object-oriented programming
- REACT강의
- JavaScript
- class
- nomadcoders
- HTML
- 국비지원
- ENFJ
- 노마드코더
- ENFJ포스팅
Archives
- Today
- Total
미미 공부/취미방
[JavaScript] input radio 내 디자인 스크립트 기능 구현 본문
input radio 체크 기능 스크립트 구현하기
상황
input radio 디자인이 안 예뻐서 디자인을 수정하고 싶다.
디자인
구연하고 싶은 스타일
기본 세팅
HTML
<ul class="radio-wrap">
<li>
<input id="apple" type="radio" name="fruits" value="apple" checked />
<label for="apple">
<p>사과</p>
<img src="체크박스 이미지 링크" />
</label>
</li>
<li>
<input id="banana" type="radio" name="fruits" value="banana" />
<label for="banana">
<p>바나나</p>
<img src="체크박스 이미지 링크" />
</label>
</li>
<li>
<input id="melon" type="radio" name="fruits" value="melon" />
<label for="melon">
<p>멜론</p>
<img src="체크박스 이미지 링크" />
</label>
</li>
</ul>
1. radio는 체크가 1개만 가능한 체크박스로, 체크가 1개만 됐는지 인식하기 위해서 'name'에 동일한 값을 주어서 그룹을 만들어 준다.
(예시. 'fruits'라는 'name'을 갖은 그룹 중 1개)
2. input의 id는 label의 for 값과 일치해야 label과 input이 연결되고, label을 클릭하면 해당 input 에 전달이 된다.
3. label에 디자인을 위한 모든 HTML구조를 넣는다.
*** input에 checked라는 속성을 넣으면 체크 박스가 체크된 상태
CSS
li {
width: 300px;
border-bottom: 1px solid #eeeeee;
}
input {
display: none;
}
label {
display: flex;
justify-content: space-between;
align-items: center;
}
img {
display: block;
width: auto;
height: 20px;
}
input은 display:none; 상태로 내가 원하는 css 스타일을 작성
JavaScript
const radioEls = document.querySelectorAll('input[type="radio"');
// 1. 로딩될 때, checked=true에 '체크됨' 이미지 넣기
if (document.querySelector('input[type="radio"]')) {
radioEls.forEach(function (el) {
if (el.checked && el.previousElementSibling.querySelector("img")) {
const checkImg = el.previousElementSibling.querySelector("img");
checkImg.src = "체크됨";
}
});
}
// 2-1. 그룹 내에서 클릭이벤트 발생하면 모든 이미지 '안됨'으로 넣기 함수
const clearCheckboxHandler = function (el) {
const sameLevelLabelEls = el.parentElement.parentElement.querySelectorAll("label");
sameLevelLabelEls.forEach(function (input) {
input.checked = false;
input.querySelector("img").src = "체크안됨";
});
};
// 2-2 클릭된 input 이미지 '체크됨'으로 넣기
const checkRadioHandler = function (el) {
const checkImg = el.querySelector("img");
// 2-1 함수가 클릭이벤트가 발생하면서 실행된다.
clearCheckboxHandler(el);
if (el.checked == false) {
el.checked = true;
checkImg.src = "체크됨";
}
};
1. 페이지 로딩시, checked=true인 input의 img를 '체크됨'이미지 넣어주기
2. input checked=true인 이미지만 '체크됨', 나머지는 '안됨'으로 넣어주기 위해서,
- 해당 그룹(name으로 지정한) 내에서 input 클릭이벤트가 발생하면 모든 이미지 '안됨'으로 넣기
- 클릭한 input의 이미지는 '체크됨' 이미지 넣기
분명 다른 방법으로도 구현 가능하겠지만, 그건 나중에 알게되면 2탄으로 작성해야겠다.🔥
'to FED' 카테고리의 다른 글
[bootstrap] 이중 모달 Modal 해결 (1) | 2022.12.10 |
---|---|
Javascript 버블링, 캡쳐링 (0) | 2022.11.19 |
Javascript 애니메이션 라이브러리 : GSAP (0) | 2022.10.21 |
Javascrip 객체 지향 프로그래밍 : 객체 간의 상속 (0) | 2022.10.04 |
Javascrip 객체 지향 프로그래밍 : 프로토타입, 클래스 (1) | 2022.09.20 |
Comments