Programing Language/Javascript

[Javascript] preventDefault()와 stopPropagation()

JHeaon ・ 2023. 3. 21. 00:04



πŸ“š preventDefault()

 

 

μ–΄λ–€ 이벀트λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ 경우, ν•΄λ‹Ή μ΄λ²€νŠΈμ— λŒ€ν•œ λΈŒλΌμš°μ €μ˜ κΈ°λ³Έ λ™μž‘μ„ μ‹€ν–‰ν•˜μ§€ μ•Šλ„λ‘ μ§€μ •ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€. 예λ₯Ό λ“€μ–΄ <a> νƒœκ·Έλ‚˜ <submit> νƒœκ·ΈλŠ” κ·Έ νƒœκ·Έμ˜ 값을 μ „μ†‘ν•˜λ©΄μ„œ ν•΄λ‹Ή νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ ν˜Ήμ€ μ΄λ™ν•˜λŠ” κΈ°λŠ₯을 가지고 μžˆμœΌλ‚˜ μ˜λ„μΉ˜ μ•Šκ²Œ μ‚¬μš©λ  κ²½μš°κ°€ μžˆμ„ 수 있기 λ•Œλ¬Έμ— Event.preventDefault() λ₯Ό μ‚¬μš©ν•œλ‹€.

 

 

 

 

 πŸ“’ <a> νƒœκ·Έμ—μ„œμ˜ μ‚¬μš© 예제

<a href="https://jheaon.tistory.com/" id="link">ν•΄μ˜¨μ˜ λΈ”λ‘œκ·Έ</a>

<script>
	document.querySelector('#link').addEventListener('click', function(e){
		e.preventDefault();
	});
	// a νƒœκ·Έ 클릭 μ‹œ preventDefaultλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— 링크값이 μžˆμ–΄λ„ μ΄λ™ν•˜μ§€ μ•ŠλŠ”λ‹€.
</script>

 

 

 πŸ“’ <submit> νƒœκ·Έμ—μ„œμ˜ μ‚¬μš© 예제

const onLoginSubmit = (e) => {
  e.preventDefault();
  
  loginForm.classList.add("hidden");
  const username = loginInput.value;
  localStorage.setItem(USERNAME_KEY, username);
  paintGreetings(username);
}

 

 

πŸ“š preventDefault()와 stopPropagation()

 

Javascriptμ—μ„œ 이벀트 μ‹€ν–‰ μ œμ–΄λ₯Ό ν•˜λŠ” 방법은 preventDefault() 말고도, stopPropagation()이 μ‘΄μž¬ν•˜λŠ”λ° μ΄λŠ” 이벀트 버블링을 쀑단 ν•  수 μžˆλ‹€λŠ” μ μ—μ„œμ˜ 차이점이 μžˆλ‹€. 

 

 

 

πŸ”– 이벀트 버블링(Event Bubbling)

이벀트 버블링은 νŠΉμ • ν™”λ©΄ μš”μ†Œμ—μ„œ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ ν•΄λ‹Ή μ΄λ²€νŠΈκ°€ 더 μƒμœ„μ˜ ν™”λ©΄ μš”μ†Œλ“€λ‘œ μ „λ‹¬λ˜μ–΄ κ°€λŠ” νŠΉμ„±μ„ μ˜λ―Έν•œλ‹€.

// html
<body>
	<div class="one">
		<div class="two">
			<div class="three">
			</div>
		</div>
	</div>
</body>
// javascript
const divs = document.querySelectorAll('div');
divs.forEach(function(div) {
	div.addEventListener('click', logEvent);
});
function logEvent(event) {
	console.log(event.currentTarget.className);
}​


μ΄λ ‡κ²Œ 3개의 div νƒœκ·Έμ— ν΄λ¦­μ‹œ logEventλ₯Ό λ°œμƒμ‹œν‚€λŠ” ν•¨μˆ˜λ₯Ό λ“±λ‘ν•˜κ³  μ΅œν•˜μœ„ div νƒœκ·Έλ₯Ό λˆ„λ₯΄λ©΄ λ‹€μŒκ³Ό 같이 μ‹€ν–‰λ˜λŠ” 것을 확인 ν•  수 μžˆλ‹€. 

three
two
one


div νƒœκ·Έ ν•˜λ‚˜λ§Œ 클릭 ν–ˆμ„λΏμΈλ°, 3개의 μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λŠ” μ΄μœ λŠ” λΈŒλΌμš°μ €κ°€ 이벀트λ₯Ό κ°μ§€ν•˜λŠ” 방식 λ•Œλ¬ΈμΈλ°, λΈŒλΌμš°μ €λŠ” νŠΉμ • ν™”λ©΄ μš”μ†Œμ—μ„œ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ, κ·Έ 이벀트λ₯Ό μ΅œμƒμœ„μ— μžˆλŠ” ν™”λ©΄ μš”μ†ŒκΉŒμ§€ 이벀트λ₯Ό μ „νŒŒμ‹œν‚¨λ‹€. 이와 같이 ν•˜μœ„μ—μ„œ μƒμœ„μš”μ†Œλ‘œμ˜ 이벀트 μ „νŒŒ 방식을 "이벀트 버블링" μ΄λΌκ³  ν•œλ‹€. 

 

 

 

 

μ •λ¦¬ν•˜μžλ©΄ preventDefault()λŠ” λ‹¨μˆœνžˆ htmlμ—μ„œ ν‘œμ€€μœΌλ‘œ μ œκ³΅ν•˜λŠ” νƒœκ·Έμ˜ κΈ°λ³Έ 이벀트 λ°œμƒμ„ λ§‰λŠ” λ©”μ„œλ“œλΌλ©΄, stopPropagation()은 말 κ·ΈλŒ€λ‘œ μƒμœ„ μ—˜λ¦¬λ¨ΌνŠΈλ‘œμ˜ 이벀트 버블링을 λ§‰λŠ”λ‹€λŠ” κ²ƒμ—μ„œ 차이가 μžˆλ‹€λŠ” 것을 확인 ν•  수 μžˆλ‹€.

'Programing Language/Javascript'의 λ‹€λ₯ΈκΈ€

  • ν˜„μž¬κΈ€ [Javascript] preventDefault()와 stopPropagation()

κ΄€λ ¨κΈ€