[html]
<body>
<form>
<p>연락 수단을 선택해주세요!</p>
<div>
<input type="radio" id="contactMethod1" name="contact" value="email" />
<label for="contactMethod1">Email</label>
<input type="radio" id="contactMethod2" name="contact" value="phone" />
<label for="contactMethod2">Phone</label>
<input type="radio" id="contactMethod3" name="contact" value="email" />
<label for="contactMethod3">Email</label>
</div>
<p>배송 방법을 선택해주세요!</p>
<div>
<input type="radio" id="deliveryMethod1" name="delivery" value="ship" />
<label for="deliveryMethod1">Ship</label>
<input type="radio" id="deliveryMethod2" name="delivery" value="plane" />
<label for="deliveryMethod2">Plane</label>
<input type="radio" id="deliveryMethod3" name="delivery" value="car" />
<label for="deliveryMethod3">Car</label>
</div>
<div class="SubmitButtonContainer">
<button type="submit">확인</button>
</div>
</form>
<span class="CurrentItem"></span> //현재 선택된 값 임시로 보여주기
<script src="./index.js"></script>
</body>
[js]
const $currentItem = document.querySelector('.CurrentItem');
const $formTag = document.querySelector('form');
$formTag.addEventListener('submit', (e) => {
e.preventDefault() //1
const formRecords = Array.from(new FormData($formTag)) //2
const formMap = {
contact: '연락 수단',
delivery: '배송 수단'
}
//3
if(Object.keys(formMap).length !== formRecords.length){
$currentItem.innerHTML = '선택사항을 클릭해주세요.'
return
}
//4
$currentItem.innerHTML = formRecords.map((record) => `${formMap[record[0]]}: ${record[1]}`).join('<br>')
});
e.preventDefault()
: 브라우저의 기본 동작을 막는다. 새로고침되는 것을 방지한다. js 이벤트는 상하 관계 요소들에 전파된다.
addEventListener의 세번째 매개변수는 어떤 방식으로 이벤트를 전파할지 결정한다. 기본값은 false이고 false일때 bubbling방식으로 전파된다.
[이벤트 버블링(Event Bubbling)]
[이벤트 캡처링(Event Capturing)]
const formRecords = Array.from(new FormData($formTag))
if(Object.keys(formMap).length !== formRecords.length){ $currentItem.innerHTML = '선택사항을 클릭해주세요.' return}