[Javascript] 라디오 버튼의 텍스트 클릭해도 선택되도록 만들기
March 10, 2024
라디오 버튼을 클릭할 때, 꼭 라디오 버튼을 눌러야 선택이 되고, 옆에 텍스트를 클릭하면 선택이 안되는 불편함이 있습니다.
텍스트를 클랙해도 해당 라디오 버튼이 체크되도록 만드는 방법을 알아보겠습니다.
1. 라디오 버튼과 텍스트 중첩
아래 예제는 라디오 버튼 뿐만 아니라, 텍스트를 클릭해도 라디오 버튼이 체크됩니다.
HTML
아래와 같이 <label>
요소 하위에 <input>
요소를 추가하면, 텍스트가 클릭되도 input
이 함께 클릭되어 라디오 버튼이 체크됩니다.
<label>
<input type="radio" name="radioGroup" value="option1"/>
옵션 1
</label>
<br>
<label>
<input type="radio" name="radioGroup" value="option2"/>
옵션 2
</label>
<br>
<label>
<input type="radio" name="radioGroup" value="option3"/>
옵션 3
</label>
2. label의 for를 이용한 방법
아래 예제는 라디오 버튼 뿐만 아니라, 텍스트를 클릭해도 라디오 버튼이 체크됩니다.
HTML
<input>
의 id와 <label>
의 for 값을 동일하게 맞춰주면, 텍스트를 클릭할 때 라디오 버튼도 함께 체크가 됩니다.
<input type="radio" name="radioGroup" id="r1" value="option1"/>
<label for="r1">옵션 1</label>
<br>
<input type="radio" name="radioGroup" id="r2" value="option2"/>
<label for="r2">옵션 2</label>
<br>
<input type="radio" name="radioGroup" id="r3" value="option3"/>
<label for="r3">옵션 3</label>
3. 텍스트 클릭 시, 라디오 버튼 체크
이미 label과 input이 중첩되어 텍스트만 클릭해도 라디오 버튼이 체크됩니다. 텍스트가 클릭되었을 때, Javascript에서 라디오 버튼을 찾아서 체크하도록 만들어봤는데 참고만 해주세요.
HTML
3개의 라디오 버튼을 추가하였고, 선택된 라디오의 value는 selectedValue
라는 요소에 출력할 것입니다.
<label>
<input type="radio" name="radioGroup" value="option1"/>
옵션 1
</label>
<br>
<label>
<input type="radio" name="radioGroup" value="option2"/>
옵션 2
</label>
<br>
<label>
<input type="radio" name="radioGroup" value="option3"/>
옵션 3
</label>
<br>
<p id="selectedValue"></p>
Javascript
querySelectorAll()
로 모든 라디오 버튼의 Label을 찾고, 모든 Label에 클릭 이벤트 리스너를 등록합니다. Label의 텍스트가 클릭되면 함수가 실행되며, 함수에서 클릭된 <label>
에 해당하는 input
요소를 찾고, 체크 되도록 만듭니다.
label.querySelector("input[type='radio']")
:<label>
하위에 type이 radio인 input을 찾음radioInput.checked = true
: 라디오버튼이 체크되도록 변경selectedValue.textContent = "선택된 값: " + radioInput.value
: 화면에 라디오 버튼의 value를 출력
const radioLabels = document.querySelectorAll("label");
radioLabels.forEach(function(label) {
label.addEventListener("click", function() {
let radioInput = label.querySelector("input[type='radio']");
radioInput.checked = true;
// 화면에 선택된 값 출력
let selectedValue = document.getElementById("selectedValue");
selectedValue.textContent = "선택된 값: " + radioInput.value;
});
});