[자바스크립트] a 태그 href 기능 끄기

소요 시간: 3분

a 태그를 비활성화 해야 하는 경우가 종종 있다.

예를 들면, 사용자가 "약관에 동의" 버튼을 클릭하거나 특정 입력 필드를 완료하기 전에는 "다음 단계"로 가는 링크를 비활성화해야 한다.

또한 특정 기능이 서버 작업을 기다리는 동안 또는 일시적으로 사용 불가일 때 관련된 링크를 비활성화하면 사용자 혼란을 줄일 수 있다.

나이 확인이나 인증된 사용자만 접근 가능한 페이지로 이동하는 경우, 인증되지 않은 사용자에게는 링크를 비활성화하는 방식으로 접근을 제한할 수 있습니다.

마찬가지로 사용자가 결제 상태를 확인하거나 구독이 활성화될 때까지 특정 서비스 페이지로 이동하는 링크를 비활성화하여 무단 접근을 방지할 수 있습니다.

그리고 종종 인터넷 연결 상태가 불안정한 경우 임시로 특정 링크를 비활성화하여 잘못된 요청을 방지하거나 안정적인 상태에서만 이동하도록 제한하기도 한다.

HTML에서 a 태그의 href 기능을 끄는 방법에는 대표적으로 JavaScript를 사용하여 이벤트를 차단하거나, CSS를 이용하여 링크를 무력화한다.

(단순히 태그만 비활성화 할 뿐만이 아니라, 사용자에게도 해당 태그가 비활성화 되어 있음을 알리는 게 좋다. 자세한 내용은 아래 링크를 참고한다.)

비활성화된 a 태그 사용자 경험 개선하기

아래 몇 가지 방법을 살펴보자.


JavaScript로 click 이벤트 차단하기

이 방법은 JavaScript로 링크의 click 이벤트를 차단하여 기본 동작을 막는 방식이다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Disable Link</title>
</head>
<body>
    <a href="https://www.example.com" id="myLink">This is a link</a>

    <script>
        document.getElementById('myLink').addEventListener('click', function(event) {
            event.preventDefault();
        });
    </script>
</body>
</html>

여기서는 id가 myLink인 링크에 대해 클릭 이벤트가 발생했을 때 event.preventDefault();를 호출하여 기본 동작을 막았다.

이 방식은 특정 이벤트 제어가 필요할 때 유용하다. 단순히 링크를 막고 싶을 때 깔끔하게 사용할 수 있다.


JavaScript로 href 속성 제거하기

두 번째 방법은 JavaScript로 href 속성을 제거하여 링크 자체가 동작하지 않도록 하는 것이다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Disable Link</title>
</head>
<body>
    <a href="https://www.example.com" id="myLink">This is a link</a>

    <script>
        document.getElementById('myLink').removeAttribute('href');
    </script>
</body>
</html>

이 방식은 href 속성을 직접 삭제하여 링크가 더 이상 클릭되지 않도록 한다.

아주 직관적이지만, 특정 상황에서는 동적으로 링크가 복원되어야 할 경우 유연성이 떨어질 수도 있을 거 같다.


CSS로 링크 비활성화하기

이번에는 CSS만을 사용하여 a 태그의 클릭 동작을 무력화하는 방법을 시도해 보았다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Disable Link</title>
    <style>
        .disabled-link {
            pointer-events: none;
            color: gray; /* Optional: To indicate that the link is disabled */
        }
    </style>
</head>
<body>
    <a href="https://www.example.com" class="disabled-link">This is a link</a>
</body>
</html>

CSS의 pointer-events: none; 속성을 사용하면 해당 요소가 마우스 이벤트를 무시하도록 만들 수 있다.

이렇게 하면 클릭이 불가능해지고, color: gray;로 시각적인 효과를 추가하여 사용자에게 링크가 비활성화되었음을 보여줄 수 있다. CSS로만 제어할 수 있어 간편하게 적용할 수 있는 장점이 있었다.


href="#"와 onclick="return false;" 또는 javascript:void(0); 사용하기

마지막으로 onclick 속성을 이용하거나 href 속성을 조정하는 방법을 활용해 보았다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Disable Link</title>
</head>
<body>
    <a href="#" onclick="return false;">This is a link</a>
</body>
</html>

href="#"와 onclick="return false;"를 사용하여 클릭해도 페이지가 이동하지 않도록 설정하였다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Disable Link</title>
    <script>
        function something() {
            alert('링크가 클릭되었습니다.');
        }
    </script>
</head>
<body>
    <a href="javascript:void(0);" onclick="something();" >링크</a>
</body>
</html>

javascript:void(0);를 사용하는 두 번째 링크는 추가적으로 페이지 이동을 방지하면서 클릭 시 특정 동작을 실행할 수 있는 유용한 방법이었다.

특히 #를 사용했을 때의 페이지 상단 이동 현상을 방지할 수 있는 대안으로도 유용하다는 점이 인상 깊었다.


정리

HTML에서 a 태그의 링크 기능을 비활성화하려면 상황에 맞는 방법을 선택하는 것이 중요하다.

단순히 링크 기능을 없애고자 한다면 href="javascript:void(0);"을 사용하는 것이 가장 안전하고 효율적인 방법이다. 이는 클릭 이벤트가 발생했을 때 페이지 이동이 전혀 일어나지 않으며, 지정한 JavaScript 함수만 실행되기 때문입니다.

각 방법의 장단점을 이해하고 적절히 활용하는 것이 중요하다.


추천 글

자바스크립트 리스트