Develop

[JavaScript] a 링크에서 이동 없이 JavaScript 함수만 실행하기

issuemaker99 2024. 11. 29. 23:53
728x90

a 링크에서 이동 없이 JavaScript 함수만 실행하기

웹 개발 시 <a> 태그를 사용하면서 특정 작업을 위해 페이지 이동 없이 JavaScript 함수만 실행하고 싶을 때가 있습니다. 이 경우, 링크의 기본 동작(페이지 이동)을 막아야 합니다. 이 글에서는 이를 구현하는 방법과 함께 간단한 예제를 제공합니다.


기본 동작 막기: event.preventDefault()

<a> 태그는 클릭 시 기본적으로 href 속성에 지정된 URL로 이동합니다. 이를 막으려면 JavaScript의 event.preventDefault()를 사용하면 됩니다.
event.preventDefault()는 이벤트의 기본 동작을 중단시키는 함수입니다.


방법 1: onclick 속성 사용

HTML의 onclick 속성에서 JavaScript 코드를 실행하면서 기본 동작을 막는 방법입니다.

<a href="https://example.com" onclick="myFunction(event)">링크</a>

<script>
  function myFunction(event) {
    event.preventDefault(); // 기본 동작 막기
    alert("JavaScript 함수가 실행되었습니다!");
  }
</script>

 

위 코드에서 event.preventDefault()는 링크의 이동을 막아줍니다. 대신 함수 내부에서 원하는 동작을 정의할 수 있습니다.


방법 2: JavaScript로 이벤트 핸들러 추가

HTML을 변경하지 않고 JavaScript 코드에서 이벤트를 추가하는 방식입니다.

<a href="https://example.com" id="myLink">링크</a>

<script>
  document.getElementById("myLink").addEventListener("click", function(event) {
    event.preventDefault(); // 기본 동작 막기
    alert("JavaScript 함수가 실행되었습니다!");
  });
</script>

 

addEventListener를 사용하면 HTML 코드와 JavaScript 코드를 분리하여 관리할 수 있어 유지보수가 용이합니다.


방법 3: href="#"와 return false 사용

간단한 방식으로, return false를 활용하여 링크 이동을 막을 수 있습니다.

<a href="#" onclick="return myFunction()">링크</a>

<script>
  function myFunction() {
    alert("JavaScript 함수가 실행되었습니다!");
    return false; // 기본 동작 막기
  }
</script>

 

return false는 onclick 핸들러 내에서 실행되어, 기본 동작을 막는 역할을 합니다.


정리

<a> 태그의 기본 동작을 막으려면 다음 세 가지 방법 중 상황에 맞는 것을 선택하면 됩니다:

  1. onclick 속성에서 event.preventDefault() 사용
  2. JavaScript에서 addEventListener로 이벤트 핸들러 추가
  3. return false 활용

아래는 위의 예제를 종합한 코드입니다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>a 링크 이동 막기</title>
</head>
<body>
  <h3>방법 1: onclick 속성</h3>
  <a href="https://example.com" onclick="myFunction(event)">링크 1</a>

  <h3>방법 2: JavaScript로 추가</h3>
  <a href="https://example.com" id="myLink">링크 2</a>

  <h3>방법 3: return false 사용</h3>
  <a href="#" onclick="return myFunction()">링크 3</a>

  <script>
    function myFunction(event) {
      if (event) event.preventDefault(); // 방법 1, 2
      alert("JavaScript 함수가 실행되었습니다!");
      return false; // 방법 3
    }

    document.getElementById("myLink").addEventListener("click", function(event) {
      myFunction(event); // 방법 2
    });
  </script>
</body>
</html>
LIST