정리노트/팀프로젝트

[JS]button 클릭시 엉뚱한 폼이 제출되는 문제: preventEvent()

망고고래 2024. 2. 28. 12:08

버튼을 클릭하면 display:none 되어있던 div가 나오는 코드를 만들었다.

(div는 css에서 display: none 처리되어있음)

<button id="addScheduleButton" class="btn btn-primary">내 여행 코스에 넣기</button>
<div id="hiddenDiv">
	<p>코스 추가
</div>
<script>
document.getElementById('addScheduleButton').addEventListener('click', function(){
	let hiddenDiv = document.getElementById('hiddenDiv');
	if(hiddenDiv.style.display === 'none'){
		hiddenDiv.style.display = 'block'
	}else{
		hiddenDiv.style.display = 'none';
	}
});
</script>

 

그런데 버튼을 클릭했을 뿐인데 페이지가 이동하려고 하고 다음과 같은 오류가 출력되었다.

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0

 

콘솔 로그를 확인해보니 같은 페이지에 있는 리뷰 작성 폼이 제출되었고, 필요한 데이터가 모자라서 오류가 발생한 것이었다.

이러한 경우, preventEvent()를 사용해서 기본 동작을 막아야 한다. 스크립트를 다음과 같이 수정해서 해결했다.

<script>
document.getElementById('addScheduleButton').addEventListener('click', function(){
    event.preventDefault();
	let hiddenDiv = document.getElementById('hiddenDiv');
	if(hiddenDiv.style.display === 'none'){
		hiddenDiv.style.display = 'block'
	}else{
		hiddenDiv.style.display = 'none';
	}
});
</script>

 

함수의 첫줄에 코드 한 줄을 추가했다.

event.preventDefault();