본문 바로가기

웹 프로그래밍/JavaScript

[JS] 이벤트 버블링 적용 및 제한

이벤트 버블링

이벤트를 실행하면, 상위에  있는 같은 이벤트를 순차적으로 실행함

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>

	window.onload = function() {
		// 이벤트 버블링 :  (onlclick) 이벤트를 실행하면, 상위에 같은 이벤트를 모두 실행시킴
		var span = document.querySelector('span')
		var h1 = document.querySelector('h1')
		var div = document.querySelector('div')
				
		span.onclick = function() {
			alert('click span...')
		}
		
		h1.onclick = function() {
			alert('click h1...')
		}
		
		div.onclick = function() {
			alert('click div...')
		}
	}
	
</script>
</head>
<body>
	<div>
		<h1>
			<span>Hello</span>
		</h1>
	</div>
</body>
</html>

 

이벤트 버블링 제한하기 

 

클릭했을 때의 이벤트(MouseEvent)를 e로 받는다. 매개변수명은 내 멋대로 정하면 됨.
MouseEvent를 항상 날리고 있었는데, 우리가 사용하지 않은 것 뿐임.

arguments[0] 으로 활용해도 같은 결과를 얻을 수 있다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>

	window.onload = function() {
		// 이벤트 버블링 :  (onlclick) 이벤트를 실행하면, 상위에 같은 이벤트를 모두 실행시킴
		var span = document.querySelector('span')
		var h1 = document.querySelector('h1')
		var div = document.querySelector('div')
				
		span.onclick = function(e) { // 클릭했을 때의 이벤트를 e로 받는다.
			alert('click span...')
			console.log(e)
		}
		
		h1.onclick = function(e) {
			alert('click h1...')
			e.cancelBubble = true // 나보다 상위의 같은 이벤트에 가지 맙시다!
		}
		
		div.onclick = function(e) {
			alert('click div...')
		}
	}
	
</script>
</head>
<body>
	<div>
		<h1>
			<span>Hello</span>
		</h1>
	</div>
</body>
</html>

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>

	window.onload = function() {
		// 이벤트 버블링 :  (onlclick) 이벤트를 실행하면, 상위에 같은 이벤트를 모두 실행시킴
		var span = document.querySelector('span')
		var h1 = document.querySelector('h1')
		var div = document.querySelector('div')
				
		span.onclick = function() { 
			// 클릭했을 때의 이벤트(MouseEvent)를 e로 받는다. 매개변수명은 내 멋대로 정하면 됨.
			// MouseEvent를 항상 날리고 있었는데, 우리가 사용하지 않은 것 뿐임.
			alert('click span...')
			console.log(arguments[0])
		}
		
		h1.onclick = function() { // 클릭했을 때의 이벤트(MouseEvent)를 e로 받는다.
			alert('click h1...')
			arguments[0].cancelBubble = true // 나보다 상위의 같은 이벤트에 영향을 미치지 맙시다!
		}
		
	/* 	func()
		
		func(1,2,3) */
		
		div.onclick = function() { // 클릭했을 때의 이벤트(MouseEvent)를 e로 받는다.
			alert('click div...')
		}
	}
	
</script>
</head>
<body>
	<div>
		<h1>
			<span>Hello</span>
		</h1>
	</div>
</body>
</html>