prevent

기본 이벤트 방지

태그 중에는 기본 이벤트가 정의되어 있는 태그들이 존재한다. 예를 들면 다음과 같은 것들이 있다.

  • <a>는 클릭 시 href 속성으로 자동 이동한다.

  • <form>은 submit 발생 시 action 속성으로 데이터를 전송한다.

이러한 기본 이벤트를 방지하기 위해서 JS와 jQuery는 다음과 같이 처리해야한다.

inline html

<a onclick="return false">click</a>

javascript

document.querySelector("a").addEventListener("click", function(e){
    e.preventDefault();
});

jQuery

$("a").click(function(e){
    //return false;
    //또는
    //e.preventDefault();
});

VueJS는 이러한 기본이벤트 방지를 .prevent 수식어로 처리한다.

<a href="#" v-on:click.prevent="testFunction">click</a>

사용 예제 - a 태그

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue event</title>
</head>

<body>
    <div id="app">
        <a href="https://www.google.com" v-on:click="testFunction">click</a>
        <br><br>
        <a href="https://www.google.com" v-on:click.prevent="testFunction">prevent default click</a>
    </div>

    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const app = Vue.createApp({
            methods: {
                testFunction() {
                    window.alert("testFunction 실행");
                }
            }
        });
        app.mount("#app");
    </script>
</body>

</html>

사용 예제 - form 태그

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue event</title>
</head>

<body>
    <div id="app">
        <h1>기본이벤트 방지 미설정</h1>
        <form action="https://www.google.com/search" method="get" v-on:submit="testFunction">
            <input type="text" name="q" placeholder="검색어 입력">
            <button type="submit">검색</button>
        </form>

        <h1>기본이벤트 방지 설정</h1>
        <form action="https://www.google.com/search" method="get" v-on:submit.prevent="testFunction">
            <input type="text" name="q" placeholder="검색어 입력">
            <button type="submit">검색</button>
        </form>
    </div>

    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const app = Vue.createApp({
            methods: {
                testFunction() {
                    window.alert("testFunction 실행");
                }
            }
        });
        app.mount("#app");
    </script>
</body>

</html>

Last updated