메뉴 건너뛰기

조회 수 321 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

자바스크립트에서 이벤트 수행 막기

 

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. &lt;a&gt; 클릭시
  - a 태그의 링크 기능이 작동하지 않는다
  - a 태그의 인라인 자바스크립트가 작동하지 않는다.
  - a 태그에 걸어둔 2개의 이벤트가 모두 작동한다.
  - 부모 요소인 div 태그에 걸어둔 이벤트도 함께 작동한다.

2. &lt;div&gt; 클릭시
  - div 태그에 걸어둔 이벤트만 작동한다.

3. &lt;nav&gt; 클릭시
  - 아무런 작동이 없다.


 

event.stopPropagation()

$(function(){
    $("div").on("click",function() {
        console.log("div 태그의 클릭 이벤트");
    });
    $("a").on("click",function(event) {
        console.log("a 태그의 클릭 이벤트1");
        event.stopPropagation();
    });
    $("a").on("click",function(event) {
        console.log("a 태그의 클릭 이벤트2");
        event.stopPropagation();
    });
});

위 처럼 스크립트 사용시 자식 요소에서 클릭 이벤트가 발생하더라도 부모 요소에 걸어둔 이벤트는 작동하지 않았다.

스크립트 부분을 위 처럼 작성 후


1. &lt;a&gt; 클릭시
  - a 태그의 링크 기능이 정상 작동한다
  - a 태그의 인라인 자바스크립트가 정상 작동한다.
  - a 태그에 걸어둔 2개의 이벤트가 모두 작동하였다.
  - 부모 요소인 div 태그에 걸어둔 이벤트는 작동하지 않는다.

2. &lt;div&gt; 클릭시
  - div 태그에 걸어둔 이벤트만 작동한다.

3. &lt;nav&gt; 클릭시
  - 아무런 작동이 없다.


 

event.stopImmediatePropagation()

$(function(){
    $("div").on("click",function() {
        console.log("div 태그의 클릭 이벤트");
    });
    $("a").on("click",function(event) {
        console.log("a 태그의 클릭 이벤트1");
        event.stopImmediatePropagation();
    });
    $("a").on("click",function(event) {
        console.log("a 태그의 클릭 이벤트2");
        event.stopImmediatePropagation();
    });
});

위 처럼 스크립트 사용시 여러개의 이벤트 중 첫번째 선언한 이벤트 하나만 처리되었고 인라인 자바스크립트는 정상적으로 실행되는 것을 확인할 수 있었다.

스크립트 부분을 위 처럼 작성 후


1. &lt;a&gt; 클릭시
  - a 태그의 링크 기능이 정상 작동한다
  - a 태그의 인라인 자바스크립트가 정상 작동한다.
  - a 태그에 걸어둔 이벤트 중 먼저 선언한 이벤트 하나만 작동한다.
  - 부모 요소인 div 태그에 걸어둔 이벤트는 작동하지 않는다.

2. &lt;div&gt; 클릭시
  - div 태그에 걸어둔 이벤트만 작동한다.

3. &lt;nav&gt; 클릭시
  - 아무런 작동이 없다.


 

return false

$(function(){
    $("div").on("click",function() {
        console.log("div 태그의 클릭 이벤트");
    });
    $("a").on("click",function(event) {
        console.log("a 태그의 클릭 이벤트1");
        return false;
    });
    $("a").on("click",function(event) {
        console.log("a 태그의 클릭 이벤트2");
        return false;
    });
});

위와 같이 return false를 사용하면 event.stopPropagation()과 event.preventDefault()를 동시에 사용하는 것과 같은 작동을 하였다. 태그 원래의 기능과 인라인 자바스크립트의 수행을 막고자 한다면 위처럼 사용해도 될 것 같다.

스크립트 부분을 위 처럼 작성 후


1. &lt;a&gt; 클릭시
  - a 태그의 링크 기능이 작동하지 않는다
  - a 태그의 인라인 자바스크립트가 작동하지 않는다.
  - a 태그에 걸어둔 2개의 이벤트가 모두 작동하였다.
  - 부모 요소인 div 태그에 걸어둔 이벤트는 작동하지 않는다.

2. &lt;div&gt; 클릭시
  - div 태그에 걸어둔 이벤트만 작동한다.

3. &lt;nav&gt; 클릭시
  - 아무런 작동이 없다.

List of Articles
번호 제목 날짜 조회 수
207 라디오버튼 선택 체크여부 radio checked 2014.03.01 12671
206 배너 램덤으로 부여주기 2014.03.01 5911
205 새창을 띠워서 focus주기 2014.03.01 5715
204 지정한 크기로 링크페이지 새창열기 2014.03.01 5455
203 샘플) top left menu 2014.03.01 5513
202 체크박스 체크하면 레이어 보여주기. 체크안하면 알려주기 2014.03.01 7458
201 주민등록번호로 성별/나이/연령대 구분 2014.03.01 8794
200 form 값 iframe 으로 넘기기 2014.03.01 6872
199 이미지나 태그정렬이 안맞을때 absmiddle 2014.03.01 5238
198 iframe을 리로드 하자! 2014.03.01 5933
197 영문, 숫자, 한글, 이메일 체크 하는 함수 2014.03.01 5292
196 iframe 높이 자동으로 잡아주기 2014.03.01 5855
195 라디오 버튼 체크 2014.03.01 5451
194 Textarea 글자수 체크 2014.03.01 5651
193 check_inputbox.js 2014.03.01 5407
192 input type checkbox 체크했는지 검사하는 소스 2014.03.01 5469
191 제목에 한글 영문 숫자 와 공란만 입력하게 하고 싶습니다. 2014.03.01 6461
190 자바 스크립트 confirm()함수에서 (확인,취소) -> (예,아니오) file 2014.03.01 10214
189 checkbox 한개 클릭으로 다른모든 checkbox 클릭되게 하기 2014.03.01 5709
188 선택된 select 의 option 값을 다른 select로 넘겨주기 2014.03.01 5668
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved