Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

우리마의 웹 개발

[Anchor] a태그 하이퍼 링크 에 대한 고찰... 본문

WEB/etc

[Anchor] a태그 하이퍼 링크 에 대한 고찰...

우리마 2020. 1. 31. 11:12

form태그에 대한 submit이나 화면이동 등등 버튼에 하이퍼링크를 주어서 화면 이동을 해야하는 상황이 꽤 많다.

그럴때 마다 버튼에 대해서 어떻게 값을 세팅 하는것이 가장 효율적인지 고민을 많이 해봤다.

그 중에서도 a태그에 대해 이야기 해보려고 한다.

 

화면이동

ajax통신이 아닌 http프로토콜 에서 화면 이동을 하는 경우 라면

<a href="URL"> 화면이동</a>

이렇게 해주어도 썩 나쁘지 않다.

 

버튼

 문제는 화면 이동이 없는 버튼 일때 인데 여기서 화면 이동이 없다는 말은 url의 변경이 없다는 뜻이다

즉, ajax통신 또는   새로고침, 네비게이터 메뉴 등을 사용할 때 이다.

대학교에서 수업이나 과제 따위를 할때는 화면이동이 없어도 어쨋든 버튼이기때문에

버튼 위에 손모양이 보여야 하고 그래서 이런식으로 쓰는 경우가 대부분이다.

1
<a href="#" onclick="functionName">확인</a>
cs
 
1
2
3
4
5
6
<style>
    #test{cursor:pointer;}
</style>
 
<a onclick="functionName" id="test">확인</a>
 
 
cs

href 에 #을 넣어서 손모양을 만들거나 css로 cursor속성을 pointer로 지정해주는 것이다.

또한,

 

1
<a href="javascript:functionName()">확인</a>
 

이렇게 javascript를 통해 함수이름을 명시 하는경우도 있다.

하지만 이 방법들의 문제점들을 한번 얘기해보자면 먼저 href="#"은 함수호출 시 함수 호출 후 이벤트 버블링으로 인해 anchor를 타서 브라우저 상단으로 이동해 버리게 된다.

두번째 방법인 javascript:functionName은 익스플로러와 파이어폭스의 경우 a태그에 의해 실행된 javascript함수가 undefined이외의 값을 리턴하게 되면 url로 간주하여 페이지를 이동시킬수가 있다.

 

위의 문제들과 더불어 url과 함수이름의 노출 이 보안상으로 찝찝하면서도

화면이동도 아닌데 손가락 모양을위한 # 또는 css... 상당히 불편하다..

이 찝찝함을 해결하기 위해서 조-금 번거로울수도있지만 괜찮은 방법이

a태그의 name이나 id값으로 script에서 값을 세팅 하는것이다.

1
2
3
4
5
6
7
8
9
10
<a href="javascript:void(0)" id="test">확인</a>
 
<script>
var test= document.getElementById('test');
    test.onclick = function(){ testFunction(); }
 
function testFunction(){
    alert("test버튼이 눌렸다");
}
</sciprt>
 
 

javasciprt:뒤에 함수명을 적어주는것과 void 의 차이점은 a태그에서 직접 함수를 호출하게 되면 this Object가 전달 되지 않는다. 예를들어서 javascript:functionName(this) 이렇게 하면

function functionName(obj){ console.log($(obj)); } 이렇게 하게 됬을때 콘솔에서는

undefined가 찍힌다는 것이다.

따라서 화면이동이 아닌 버튼을 이용할 경우 자기자신의 객체인 this를 사용할 일이 많이 있다고 생각되어서

javascript:void(0)로 a태그 href에 넣어주고 함수명 노출을 방지 하기위해 id값으로 sciprt에서 클릭 이벤트를 세팅한다...

위 방법을 script에서 jquery 문법으로도 당연히 가능하다.

1
2
3
4
5
6
7
8
9
10
11
<a href="javascript:void(0)" id="test">확인</a>
 
<script>
/* $("#test").on("click",function(){
  alert("click!");
}); */
 
$("#test").click(function(){
alert("click!");
});
</sciprt>
 

주석 된 부분도 똑같이 잘 작동한다

나는 이렇게 id값을 이용해 script에서 버튼 세팅 하는게 제일 깔끔하더라

 

Comments