일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- deferred
- Spring
- modal #alert #sweetalert #sweetAlert #모달
- egov
- DAO
- Controller
- 외부접속
- 우리마
- paginationInfo
- SpringFramework
- Boot
- REST
- CRUD
- 대댓글
- 비동기
- Today
- Total
우리마의 웹 개발
[Anchor] a태그 하이퍼 링크 에 대한 고찰... 본문
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에서 버튼 세팅 하는게 제일 깔끔하더라
'WEB > etc' 카테고리의 다른 글
[Eclipse]하나의 이클립스에서 같은 프로젝트 화면 두개 띄우기 (8) | 2021.08.04 |
---|---|
[Eclipse]이클립스 Search 시에 기존 Search 창 닫히는거 새창으로 나오게 하기 (3) | 2021.07.28 |
[Graph Lib] High Chart 라이브러리 사용법 및 Spring 적용 (4) | 2020.09.03 |
[cmd]Windows CMD 에서 PID로 프로세스 Kill (0) | 2020.02.04 |
[Modal Popup] SweetAlert 사용하기 (0) | 2020.01.15 |