자바스크립트에서 이벤트 수행 막기
event.preventDefault()
현재 요소에 직접 걸어준 이벤트는 처리하지만 태그의 기본 동작은 작동하지 않도록 막는다.
event.stopPropagation()
기본적으로 하위 요소에서 발생한 이벤트는 상위 요소에서도 캐치가 가능한데 이 함수는 현재 요소에서 발생한 이벤트가 상위 요소에서는 발생하지 않도록 막아준다.
event.stopImmediatePropagation()
현재 요소에 발생한 이벤트가 상위 요소에서 발생하지 않도록 막아주고, 현재 요소의 이벤트가 여럿일 경우 첫 번째 정의한 이벤트만 작동하도록 한다.
return false
jQuery에서 : event.preventDefault()와 event.stopPropagation() 동시 수행한다.
javascript에서 : event.preventDefault()와 같다.
ex) <a href="javascript:return false;">링크예시<a>
예제 소스
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<style>
nav {background-color: gray; padding: 40px;}
div {background-color: yellow; padding: 40px;}
a {background-color: green; padding: 20px; display: inline-block;}
</style>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
$(function(){
$("div").on("click",function() {
console.log("div 태그의 클릭 이벤트");
});
$("a").on("click",function(event) {
console.log("a 태그의 클릭 이벤트1");
event.preventDefault();
});
$("a").on("click",function(event) {
console.log("a 태그의 클릭 이벤트2");
event.preventDefault();
});
});
</script>
</head>
<body>
<nav>
<div>
<a href="http://www.daum.net" target="_blank">링크</a>
<a href="javascript:console.log('a 태그의 인라인 자바스크립트 호출');">alert</a>
</div>
</nav>
</body>
</html>
event.preventDefault()
$(function(){
$("div").on("click",function() {
console.log("div 태그의 클릭 이벤트");
});
$("a").on("click",function(event) {
console.log("a 태그의 클릭 이벤트1");
event.preventDefault();
});
$("a").on("click",function(event) {
console.log("a 태그의 클릭 이벤트2");
event.preventDefault();
});
});
스크립트 부분을 위 처럼 작성 후
1. 클릭시 - a 태그의 링크 기능이 작동하지 않는다 - a 태그의 인라인 자바스크립트가 작동하지 않는다. - a 태그에 걸어둔 2개의 이벤트가 모두 작동한다. - 부모 요소인 div 태그에 걸어둔 이벤트도 함께 작동한다. 2. 클릭시 - div 태그에 걸어둔 이벤트만 작동한다. 3.