📌 1. <a> 태그의 기본 개념
HTML에서 <a> 태그는 링크를 만들기 위한 태그입니다. 기본 문법은 다음과 같습니다:
구글로 이동
위 코드는 "구글로 이동"이라는 텍스트를 클릭했을 때 href 속성에 지정된 URL인 https://www.google.com/ 으로 이동하게 됩니다. 이것이 기본적인 <a> 태그의 기능입니다.
📌 2. 자바스크립트와 함께 쓰는 <a href="javascript:...">
<a> 태그의 href 속성에는 단순히 URL만 넣을 수 있는 게 아닙니다. 자바스크립트 코드도 삽입이 가능합니다.
<a href="javascript:alert('테스트입니다')">클릭</a>
이 코드를 클릭하면 경고창(alert)이 나타납니다. 브라우저가 href 속성의 값을 해석할 때 javascript:로 시작하면 이를 자바스크립트 코드로 인식하여 실행하게 되는 원리입니다.
❓ 그런데 왜 javascript:void(0)을 쓸까?
이제 본론으로 들어가 봅니다.
<a href="javascript:void(0)">링크 막기</a>
위 코드에서 사용된 void(0)는 **"아무것도 하지 마라"**는 의미입니다. 즉, 클릭해도 브라우저가 아무런 반응도 하지 않게 만드는 방법입니다.
📚 void() 함수란?
자바스크립트에서 void는 식(expression)을 평가한 후 아무런 결과도 반환하지 않도록 하는 연산자입니다. 간단히 말해, 어떤 표현식을 실행해도 undefined를 반환하게 만듭니다.
예를 들어,
void(0) // undefined 반환
void("hello") // undefined 반환
즉, javascript:void(0)은 특정 함수를 실행하거나 페이지를 이동하는 것이 아니라 그 어떤 효과도 일어나지 않도록 차단하는 목적으로 사용됩니다.
💡 왜 <a> 태그를 쓰면서 링크는 막으려 할까?
정말 좋은 질문입니다.
사실 대부분의 경우라면 <a> 태그 대신 <button> 또는 <span> 태그를 사용하는 것이 더 직관적일 수 있습니다. 하지만 다음과 같은 경우에는 <a> 태그를 써야 할 필요가 생깁니다:
✅ CSS 디자인 목적
많은 UI 프레임워크나 CSS 스타일에서는 <a> 태그에만 적용되는 전용 스타일이 존재합니다. 예를 들어 파란색 글씨에 밑줄이 들어가는 링크 스타일을 그대로 활용하고 싶을 때 <a> 태그를 쓰게 됩니다.
✅ JavaScript로 동작 제어
게시판, 캘린더 등에서 글 제목을 클릭했을 때 자바스크립트로 내부 콘텐츠를 펼치거나 처리할 때, 링크 이동은 막고 싶고 디자인은 <a> 스타일을 유지하고 싶은 경우 javascript:void(0)을 사용합니다.
✅ 접근성과 일관성
사용자 경험(UX) 측면에서, 링크처럼 보이는 요소는 <a> 태그로 유지하는 것이 시맨틱하게 맞을 수 있습니다.
⚠️ javascript:void(0)의 실제 활용 예시
🔸 예제 1 – 링크 동작 없이 이벤트만 발생시키기
<a href="javascript:void(0)" onclick="alert('내용이 없습니다');">제목 없음</a>
위 코드는 게시판에서 비어 있는 글 제목을 클릭했을 때, 페이지는 이동하지 않고 경고 메시지만 띄워주는 역할을 합니다.
⚠️ javascript:void(0) vs <a href="#">의 차이점
이 둘은 혼동되기 쉽지만, 작동 방식은 다릅니다.
✅ <a href="#">
<a href="#">임시링크</a>
- 클릭 시 페이지 맨 위로 이동합니다.
- href="#"는 HTML 문서 내 id="..."를 가진 요소로 스크롤을 이동시키기 위한 용도입니다.
- 단순히 #만 적으면 문서 최상단으로 이동하는 현상이 발생합니다.
- 단점: 불필요한 스크롤 이동이나 URL 변경(# 추가) 등 부작용이 생길 수 있습니다.
✅ javascript:void(0)
- 클릭 시 아무 동작도 하지 않음.
- URL에 변경도 없음.
- 불필요한 새로고침이나 스크롤 이동 없이 정지 상태 유지.
- 클릭 이벤트만 처리하고 싶을 때 가장 깔끔한 방식입니다.
✨ 실무에서 자주 쓰이는 패턴
✅ UI/UX 구성 시
<a href="javascript:void(0)" onclick="toggleContent();">내용 펼치기</a>
- toggleContent()라는 함수가 특정 DIV를 열고 닫는 역할을 하며,
- 클릭 시 페이지 이동 없이 자바스크립트만 실행됩니다.
✅ 캘린더 UI 구성 시
<a href="javascript:void(0)" onclick="showDetail('2025-07-25');">25일</a>
- 날짜 클릭 시 상세 데이터를 보여주되, 페이지 이동은 필요 없는 경우에 유용합니다.
✅ 접근성 측면에서 주의할 점
웹 접근성 측면에서는 javascript:void(0)도 고려가 필요합니다. 단순한 a 태그는 키보드 포커싱이 가능하고, 스크린 리더가 내용을 읽어주지만, 의미 없이 void(0)만 들어가 있다면 사용자 혼란을 줄 수 있습니다.
해결 방법:
- role="button" 속성 추가
- tabindex="0" 명시
- aria-label 사용
<a href="javascript:void(0)" role="button" aria-label="상세 열기" onclick="toggle();">+</a>
🚫 javascript:void(0) 남용은 금물
모든 곳에 무조건 javascript:void(0)을 쓰는 것은 좋은 습관이 아닙니다. 경우에 따라서는 다음과 같은 방식이 더 좋습니다:
- button 태그로 대체
- 이벤트 리스너에서 event.preventDefault() 사용
예시:
<a href="#" onclick="event.preventDefault(); alert('클릭됨');">클릭</a>
위처럼도 동작 제어는 가능하지만, 여전히 URL이 #로 바뀌는 문제는 남습니다.
🔚 마무리 요약
구분 설명 특징
| <a href="#"> | 내부 링크(맨 위로 이동) | URL에 #이 추가되고, 스크롤 이동 가능성 있음 |
| <a href="javascript:void(0)"> | 아무 동작 없음 | 스크롤, 새로고침 없이 정지. 이벤트 처리용 |
| void(0) | undefined 반환 | 페이지 변화 없음, 이벤트만 |
'정책' 카테고리의 다른 글
| Node.js 동기와 비동기의 차이 완벽 이해하기 (3) | 2025.07.26 |
|---|---|
| 왓챠 영화 추천 🎬 여름의 열기처럼 치열한 성장 무비 5편 (6) | 2025.07.26 |
| Node.js로 웹 스크래핑 시작하기! 자바스크립트로 원하는 데이터 뽑아오기 (3) | 2025.07.25 |
| 자바스크립트 배열 합치기 3가지 방법: concat, spread, push 완전 정복 (2) | 2025.07.25 |
| Node.js Express에서 POST 방식으로 데이터 전송하기 – EJS 템플릿 활용 완전정복 (2) | 2025.07.25 |