'#'링크 클릭이 페이지 상단으로 이동하지 못하게하는 방법은 무엇입니까?


213

현재 <a>jQuery와 함께 태그를 사용하여 클릭 이벤트 등을 시작하고 있습니다.

예는 <a href="#" class="someclass">Text</a>

그러나 '#'이 페이지를 페이지 상단으로 이동시키는 방식이 싫습니다. 대신 무엇을 할 수 있습니까?



2
나는 David Dorward와 함께 있고, 중복 된 질문에 대해 gargantaun 하고 있습니다. 웹 사이트에 링크가있는 경우 일반 링크로 작동해야합니다. 자바 스크립트가 그것들을 가로 채서 다른 일을한다면 모두 좋고 훌륭하지만, 실제 링크가 있어야 실제 페이지로 연결됩니다. 이것은 모든 종류의 이유로 필요하며, SEO 및 접근성 중 최소한의 것은 아닙니다.
Daniel Pryden

"멍청한 멍청한

답변:


242

jQuery에서 클릭 이벤트를 처리하면 링크가 일반적인 방식으로 응답하지 않도록하려면 false를 리턴하십시오.href속성 을 방문하는 기본 조치가 발생하지 않도록하십시오 (PoweRoy의 의견 및 Erik의 답변에 따라 ).

$('a.someclass').click(function(e)
{
    // Special stuff to do when this link is clicked...

    // Cancel the default action
    e.preventDefault();
});

1
@pranay : OP는 jQuery를 사용하여 이러한 링크를 사용하도록 지정했습니다.
BoltClock

8
false를 반환하는 대신 event.preventDefault ()를 수행하십시오. 이것은 코드를 읽을 사람들에게 더 분명합니다.
RvdK

@ PoweRoy : 알았습니다. 나는 편집하고 새로운 것을 배웠다 :)
BoltClock

5
@BoltClock OP는 앵커 대신 클릭 이벤트를 처리하기 위해 버튼을 사용해야합니다. 귀하의 답변은 매우 유용하지만 href가 어딘가에 있고 현재 리디렉션이 필요하지 않은 경우 입니다. 전혀 필요하지 않은 행동의 기본 행동을 방지하는 것은 다음과 같은 일종의 조언입니다. 칼을 잡고 날을 잡고 손잡이를 사용하여 못을 망치십시오 :) 작업에 적합한 도구를 사용하십시오!
takeshin

1
jquery의 경우 :$('a[href=#]').click(function(e) { e.preventDefault(); });
Snufkin

298

그래서 이것은 오래되었지만 ... 누군가가 검색에서 이것을 찾은 경우를 대비하여.

"#/"대신에 사용 "#"하면 페이지가 이동하지 않습니다.


2
정확히 내가 필요한 것! 귀하의 의견 후 1 년이 지나도 도움이되었으므로 Chris
Zack

49
그것이라는 앵커로 이동하기 때문에 그 일 /때문이 아니라, #/어떤 의미를 갖습니다. 당신도 같은 일을 할 수 #whateveryouwant있고 그것은 정상으로의 점프를 막을 것입니다
slang

3
이것이 가장 좋은 대답이어야합니다. 당신을 사랑합니다.
Gilberto Sánchez

1
@ slang, 당신이 옳았지만 이것은 단지 nitpicking이지만, "# /"는 매우 일반적으로 사용되므로 의도 (Clean Code)를 나타 내기 때문에 "#whateveryouwant"대신 "# /"를 사용하는 것이 좋습니다. 그래도 대답에 추가 될 수 있습니다.
jobbert

22
주의-브라우저 히스토리에 레코드를 생성하므로 뒤로를 클릭하면 링크 #/또는 다른 링크를 클릭 한 후 사용자가 생각하는 바를 수행하지 않습니다 #whatever.
대런 스위니

61

다음과 같이 작성할 수도 있습니다.

<a href="javascript:void(0);"></a>

더 나은 방법은 모르겠지만 방법입니다 :)


이 방법은 HTML 4 이전 버전에는 적합했지만 현재는 "새 탭에서 링크 열기"와 같은 너무 많은 탐색 작업을 수행하지 않으므로 매우 좋지 않습니다.
Steve-o

7
당신은 아마 맞지만 ....이 경우 그는 onclick 이벤트를 제공하기 때문에 중요하지 않습니다 그래서 새로운 탭에서 열린 링크가 작동하지 않을 것입니다 ...
guy schaller

바로 가기는 href='javascript:;'IE의 window.beforeUnload 이벤트를 트리거하는 데주의하십시오
Mihir

이것은 자신의 기능을 깰 수 있습니까? 이 작업을 수행하면 슬라이드를 렌더링하는 기능이 더 이상 트리거되지 않기 때문입니다.
user3806549

29

해결책 # 1 : (일반)

<a href="#!" class="someclass">Text</a>

해결책 # 2 : (필요 javascript)

<a href="javascript:void(0);" class="someclass">Text</a>

솔루션 # 3 : (필요 jQuery)

<a href="#" class="someclass">Text</a>
<script>
$('a.someclass').click(function(e) {
    e.preventDefault();
});
</script>

3
첫 번째 해결책은 완벽합니다. 짧고 깨끗하며 단순합니다. 이것이 정답입니다. 감사!
AlmostPitt

번호 1은 훌륭한 솔루션입니다. 감사합니다!
Brenton Scott


11

그냥 사용하는 <input type="button" />대신 <a>원하는 경우 링크처럼 보이도록 스타일을과 CSS를 사용.

버튼은 클릭을 위해 특별히 만들어졌으며 href 속성이 필요하지 않습니다.

가장 좋은 방법은 onload 액션을 사용하여 버튼을 만들고 javascript를 통해 필요한 곳에 추가하는 것이므로 javascript를 비활성화하면 전혀 표시되지 않으며 사용자를 혼동하지 않습니다.

사용 href="#"하면 에이전트가 JavaScript를 지원하지 않는 경우 동일한 위치를 가리키는 수많은 다른 링크가 표시됩니다.


1
@kingjeffrey 그러나 아무것도하지 않는 것이 여전히 탐색하는 것보다 낫습니다 #.
Robert

8

앵커를 사용하려면 제안 된 다른 답변과 같이 http://api.jquery.com/event.preventDefault/ 를 사용할 수 있습니다 .

범위와 같은 다른 요소를 사용하고 클릭 이벤트를 해당 요소에 첨부 할 수도 있습니다.

$("span.clickable").click(function(){
alert('Yeah I was clicked');
});

7

ID로 사용할 수 없으므로 페이지로 이동하지 않으므로 #0href로 사용할 수 있습니다 0.

<a href="#0" class="someclass">Text</a>

5
$('a[href="#"]').click(function(e) {e.preventDefault(); });

3
간단한 설명을 추가해 주시겠습니까?
JF Meier

그가 "#"와 관련된 앵커가있는 앵커에 클릭 핸들러를 추가하는 것처럼 보입니다. 이런 식으로, 당신은 당신이 이미 가지고있는 모든 클릭 핸들러를 검색하고 그 안에 e.preventDefault ()를 추가 할 필요가 없습니다.
Mani5556

4

그냥 사용

<a href="javascript:;" class="someclass">Text</a>

쿼리

$('.someclass').click(function(e) { alert("action here"); }

4

요소에 의미있는 href 값이 없으면 실제로 링크가 아니므로 다른 요소를 대신 사용하지 않는 이유는 무엇입니까?

Neothor가 제안한 것처럼 스팬은 적절하고 스타일이 올바르게 지정되면 클릭 할 수있는 항목으로 눈에 띄게 나타납니다. 마우스 오버 이벤트를 연결하여 사용자의 마우스가 움직일 때 '점등'을 만들 수 있습니다.

그러나 이것을 말하면 사이트 디자인은 자바 스크립트없이 작동하도록 다시 생각할 수 있지만 사용 가능한 경우 자바 스크립트로 향상됩니다.


4

href = "#"링크는 거의 항상 버튼 요소로 대체되어야합니다.

<button class="someclass">Text</button>

href = "#"와 함께 링크를 사용하면 접근성 문제가 될 수 있습니다. 이러한 링크는 화면 판독기에 표시되므로 "링크-텍스트"가 표시되지만 사용자가 클릭하면 아무데도 가지 않습니다.


3

href 속성없이 앵커 태그를 전달하고 jQuery를 사용하여 필요한 작업을 수행 할 수 있습니다.

<a class="foo">bar</a>


사용자가 js를 비활성화 한 경우 대체 조치가 없으므로 일반적 으로이 방법을 권장하지 않습니다. 그러나 이미 href로 설정되어 #있다고 가정하면, 이것이 귀하에게 문제가되지 않는다고 가정하고 귀하의 요구를 충족시키는 가장 간단한 수단 일 수 있으므로이 솔루션을 제공했습니다.
kingjeffrey

1
a:linkCSS 선택기는이 앵커 태그를 대상으로하지 않습니다.
BoltClock

BoltClock, 이것이 사실입니다. 그러나 st4ck0v3rfl0w는 그러한 필요성을 나타내지 않았습니다.
kingjeffrey

그런 다음 <div>를 사용할 수도 있습니다. <a>를 유지하는 데있어 요점은 스타일을 유지하는 것인데, 이는 이미 일반 <a>에 의해 정의되어 있습니다. href가 없으면 다른 <a>와 같이 감지되고 스타일이 지정되지 않습니다.
MarsAndBack


3

#/트릭은 작동하지만, 브라우저에 기록 이벤트를 추가합니다. 따라서 사용자가 원하거나 기대할 수 있으므로 뒤로 클릭은 작동하지 않습니다.

$('body').click('a[href="#"]', function(e) {e.preventDefault() }); 이미 존재하는 내용과로드 후 DOM에 추가 된 모든 요소에 작동하므로 내가 갔던 방식입니다.

특히 .btn-group(Reference) 내부의 부트 스트랩 드롭 다운 메뉴 에서이 작업을 수행해야하므로 다음과 같이했습니다 .

$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });

이런 식으로 대상을 지정했으며 페이지의 다른 항목에는 영향을 미치지 않았습니다.


3

나는 항상 사용했다 :

<a href="#?">Some text</a>

페이지 점프를 방지하려고 할 때. 이것이 최선인지 확실하지 않지만 수년 동안 잘 작동 한 것 같습니다.


3

JavaScript없이 페이지가 맨 위로 이동하지 못하게하는 4 가지 방법이 있습니다.

옵션 1:

<a href="#0">Link</a>

옵션 2 :

<a href="#!">Link</a>

옵션 3 :

<a href="#/">Link</a>

옵션 4 ( 권장하지 않음 ) :

<a href="javascript:void(0);">Link</a>

그러나 event.preventDefault()jQuery에서 클릭 이벤트를 처리하는 경우 사용 하는 것이 좋습니다 .


3
이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
A. Suliman 5

2

jquery를 처리 한 후 false를 반환 할 수도 있습니다.

예 :

$(".clickableAnchor").live(
    "click",
    function(){
        //your code
        return false; //<- prevents redirect to href address
    }
);

1
즉, 라이브 방법은 더 이상 사용되지 않으며 더 이상 사용해서는 안됩니다.
Quentin

2

나는 이와 같은 것을 사용한다 :

<a href="#null" class="someclass">Text</a>

2

페이지가 점프하지 않도록하려면 전화해야합니다. e.stopPropagation(); 한 후 호출e.preventDefault(); .

stopPropagation이벤트가 DOM 트리로 올라가지 못하게합니다. 자세한 정보는 여기 : https://api.jquery.com/event.stoppropagation/


내 HTML에 붙여 넣을 수있는 전체 코드를 제공해 주시겠습니까? Zurb Foundation 5.5.3을 사용하고 있습니다.
Julie S.

2

페이지를 넘지 않고 동일한 페이지의 앵커 섹션으로 마이그레이션하려면 다음을 사용하십시오.

"#"대신 "# /"를 사용하십시오. 예 :

<a href="#/home">Home</a>
<a href="#/about">About</a>
<a href="#/contact">contact</a> page will not jump up on click..

1

뒤에 무언가를 추가하면 #해당 ID를 가진 요소에 페이지의 초점이 설정됩니다. 가장 간단한 해결책은 #/jQuery 를 사용 하는 경우에도 사용 하는 것입니다. 그러나 jQuery에서 이벤트를 처리하는 경우 event.preventDefault()갈 길입니다.


0

<a href="#!">Link</a><a href="#/">Link</a> 작동하지 않음 한 번 이상 동일한 입력을 클릭해야하는 경우 .. 그것은 단지 여러 개의 입력에 각각 1 이벤트 클릭으로합니다.

여전히 가장 좋은 방법은 <a href="#">Link</a>

그때,

event.preventDefault();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.