앵커 태그가 아무것도 참조하지 않게하는 방법?


159

jQuery를 사용하는데 일부 앵커 태그가 동작하지 않도록해야합니다.

나는 보통 다음과 같이 쓴다 :

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

그러나 이것은 페이지의 상단을 나타냅니다!


왜냐하면 jquery는 click 이벤트를 처리하기 때문에 링크는 앵커 링크처럼 보이지만 JavaScript 함수처럼 행동하기를 원합니다
— ahmed


1
아래 답변 중 하나에서 언급했듯이 링크가 리소스를 가리 키지 않게하려면 A 요소를 사용하지 마십시오.
— Mathias Bynens

href속성을 사용하지 마십시오 .
— vsync

답변:


103

아무 것도 가리 키지 않게하려면 <a>(앵커) 태그를 사용하지 않아야합니다 .

링크처럼 보이지만 링크처럼 작동하지 않으려면 적절한 요소 (예 <span>:)를 사용하고 CSS를 사용하여 스타일을 지정하는 것이 가장 좋습니다 .

<span class="fake-link" id="fake-link-1">Am I a link?</span>

.fake-link {
    color: blue;
    text-decoration: underline;
    cursor: pointer;
}

또한이 질문에 "jQuery"라는 태그를 지정하면 클릭 이벤트 처리기를 첨부한다고 가정합니다. 그렇다면 위와 동일한 작업을 수행하고 다음 JavaScript와 같은 것을 사용하십시오.

$('#fake-link-1').click(function() {
    /* put your code here */
});

37
문제가 있습니다. 탭 탐색을 허용하지 않습니다.

6
(Iraimbilanja가 지적한 것처럼) 여기서 span 접근 방식은 키보드를 사용하여 함수를 호출 할 가능성을 비활성화합니다. 이는 유용성 문제를 고려할 것입니다.
— Fredrik Mörk

3
접근성 문제도 있습니다. 자바 스크립트에서 생성 된 버튼 요소를 사용하여 해결할 수 있습니다 (JS 이외의 사용자는 제어권을 얻지 못함).
— Quentin

4
비 링크 요소의 tabindex = "0"은 대부분의 최신 브라우저에서 키보드 탐색을 가능하게합니다.
— Mathias Bynens

1
또 다른 '문제'는 CSS : hover 의사 클래스가 IE6에서 링크되지 않은 요소에서 작동하지 않는다는 것입니다. 그러나 어쨌든 JavaScript를 통해 이러한 요소를 추가하기 때문에 (적어도), 마우스 오버시 요소에 .hover 클래스를 추가하는 스크립트를 작성할 수도 있습니다.
— Mathias Bynens

268

완벽한 솔루션이 아닌 몇 가지가 있습니다.

1. 가짜 앵커에 연결

<a href="#">

문제점 : 링크를 클릭하면 페이지 맨 위로 이동

2. 'a'이외의 태그 사용

스팬 태그를 사용하고 jquery를 사용하여 클릭을 처리하십시오.

문제 : 키보드 탐색이 중단되고 호버 커서를 수동으로 변경해야합니다.

3. 자바 스크립트 void 함수에 링크

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

문제 : IE에서 이미지를 연결할 때 중단

해결책

이것들은 모두 문제가 있기 때문에 내가 해결 한 해결책은 가짜 앵커에 연결 한 다음 onClick 메소드에서 false를 반환하는 것입니다.

<a href="#" onClick="return false;">

가장 간결한 솔루션은 아니지만 위의 방법으로 모든 문제를 해결합니다.


2
나는 보통 javascript를 사용한다 : void (0); #을 사용하면 Firefox URL에 마우스를 올려 놓으면 현재 URL이 표시되므로 사용자에게 오해의 소지가 있습니다.
— lucaferrario

8
breaks when linking images in IE이것은 무엇을 의미 하는가?
— eugene

14
@eugene이 질문은 이제 3 살이지만 IE는 void 함수에 대한 링크로 둘러싸여있을 때 이미지가 사라지도록 사용했습니다. 언제 수정되었는지 확실하지 않지만 IE10에서 작동합니다. 저는 개인적으로 사용합니다<a href="javascript:;">
— zaius

1
나는 거기에도 주석을 사용했습니다 : <a href="javascript:void(0); // 속성 팔레트 표시">. 이렇게하면 사용자가 호버링 할 때 클릭 할 때 예상 할 수있는 힌트를 제공하는 주석이 표시됩니다. (툴팁도 사용할 수 있지만)
— Robin Zimmermann

5
그것도 href="javascript:"충분하고 최신 주요 브라우저에서 작동합니다. 세미콜론이 필요하지 않으며 실제로 PhpStorm은 세미콜론을 제거하도록 제안합니다.
— jlh

40

아무것도하지 않게하려면 다음을 사용하십시오.

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

1
또는 그냥 <a href="javascript:;">. PS는 작동하지 않습니다 target=_blank하지만
— 알렉스

36

이를 처리하는 올바른 방법은 링크를 처리 할 때 jQuery로 링크를 "중단"하는 것입니다.

HTML

<a href="#" id="theLink">My Link</a>

JS

$('#theLink').click(function(ev){
    // do whatever you want here

    ev.preventDefault();
    ev.stopPropagation();
});

마지막 두 번의 호출은 브라우저가 클릭을 해석하지 못하게합니다.


5
이벤트 버블 링을 중지하기 때문에 "적절한"것처럼 들리지만 "거짓 반환"은 덜 장황하고 같은 일을합니다. jQuery를 통해 링크를 클릭하도록 이벤트 핸들러가 이미 등록되어있는 경우에만 그렇게 할 수 있습니다.
— aleemb 2016 년

25

그것을 좋아하는 많은 방법이 있습니다

추가 및 href속성 안 함

<a name="here"> Test <a>

href 대신 onclick 이벤트를 추가 할 수 있습니다

<a name="here" onclick="YourFunction()"> Test <a>

또는 가장 좋은 방법 인 void 함수를 추가 할 수 있습니다

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

이름 속성이 필요합니까?
— Petrus Theron

@PetrusTheron 필요하지 않습니다. .
— Punit Gajjar

이것은 기존 답변의
— 파기입니다

1
href속성이 더 이상 하이퍼 링크처럼 동작하지 않기 때문에 속성 을 제거하면 앵커 태그의 스타일을 설정하는 것을 잊지 마십시오 (onclick은 여전히 ​​작동하더라도) cursor: pointer;및 :hover선택기 와 같은 항목을 재설정해야 합니다 .
— Partack

@Partack Correct .. 감사합니다
— Punit Gajjar

24

아무 의미가 없나요?

<a href='about:blank'>blank page</a>

또는

<a href='whatever' onclick='return false;'>won't navigate</a>

1
합의
— -jQuery

14

시도해 볼 수있을 것 같아

<a href="JavaScript:void(0)">link</a>

내가 여기서 볼 수있는 유일한 것은 자바 스크립트를 실행할 때 높은 수준의 브라우저 보안이 프롬프트 될 수 있다는 것입니다.

이보다 쉬운 방법 중 하나이지만

<a href="#" onclick="return false;">Link</a>

이것은 드물게 사용해야합니다

몇 가지 포인터에 대한이 기사를 읽으십시오 https://web.archive.org/web/20090301044015/http://blog.reindel.com/2006/08/11/a-hrefjavascriptvoid0-avoid-the-void


정답, 탭 탐색이 가능합니다.
— K-SO의 독성이 증가하고 있습니다.

14

이 답변은 새로운 웹 표준 (HTML5)을 반영하도록 업데이트되어야합니다.

이:

<a tabindex="0">This represents a placeholder hyperlink</a>

... 유효한 HTML5입니다. tabindex 속성은 일반 하이퍼 링크처럼 키보드를 포커스 할 수있게합니다. span앞에서 언급 한대로이 요소를 사용할 수도 있지만 a요소를보다 우아하게 사용하는 것을 알 수 있습니다.

참조 : https://w3c.github.io/html-reference/a.html
및 https://html.spec.whatwg.org/multipage/links.html#attr-hyperlink-href


1
이것은 유효한 HTML4이지만 앵커를 링크로 스타일링하지는 않습니다.
— interjay

1
유효한 html4인지 몰랐지만 HTML5 사양에 명시 적으로 유스 케이스가 언급되어 있습니다. href 속성을 대상으로하지 않는 스타일은 제대로 작동하지만 기본 브라우저 스타일 만 문제가 될 수 있습니다.
— aross

1
click사용자가 요소에 초점을 맞추고 Enter 키를 누르면 이벤트가 트리거되지 않습니다 (Firefox 51에서 테스트).
— torvin

@torvin, 간단합니다. keydown이벤트를 사용하십시오 .
— aross


12

<a>태그의 href태그 속성이 아무것도 참조하지 않는 세 가지 방법은 다음과 같습니다 .

<a href="JavaScript:void(0)"> link </a>

<a href="javascript:;">link</a >

<a href="#" onclick="return false;"> Link </a>

1
이 단지의 중복 현재 가장 높은 답을 투표 한 하지만, 적은 정보로
— aross

5

나는 이것이 오래된 질문이라는 것을 알고 있지만 어쨌든 내 2 센트를 추가 할 것이라고 생각했습니다.

링크가 수행 할 작업에 따라 다르지만 일반적으로 상자 팝업에 대해 약간의 정보를 표시하는 경우와 같이 동일한 것을 표시 / 수행 할 수있는 URL에서 링크를 가리키고 있습니다.

<a id="about" href="/about">About</a>

그런 다음 jQuery로

$('#about').click(function(e) {
    $('#aboutbox').show();
    e.preventDefault();
});

이런 식으로 아주 오래된 브라우저 (또는 JavaScript가 비활성화 된 브라우저)는 여전히 별도의 정보 페이지로 이동할 수 있지만, 더 중요한 것은 Google이이를 선택하여 정보 페이지의 내용을 크롤링하는 것입니다.


5

중지하려는 모든 링크 href="#!"(또는 실제로 원하는 것)가 있는지 확인한 후 다음을 사용하십시오.

jq('body').on('click.stop_link', 'a[href="#!"]',
function(event) {
     event.preventDefault();
});

4

속성 a없이 HTML 앵커 ( 태그)를 가질 수 있습니다 href. href속성을 제외하면 아무것도 링크되지 않습니다.

<a>link</a>

감사합니다! 내 경우에는 완벽하게 작동했습니다. URL이있을 때 새 탭에서 앵커 태그를 열려면 URL이 없으면 아무것도 없습니다. #의 경우 클릭을 수락하여 페이지 맨 위로 이동했습니다. 제안한대로 href 부분이 없습니다. 문제를 해결했습니다! 태그가 없어서 형식이 멋지게 보입니다. href 문제없이 클릭 문제가 발생했습니다. 감사합니다!!!
— Mohsin

1
HTML5가 유효하다고 생각하는 사람이 있다면 YES :) stackoverflow.com/a/33046203/5323892 입니다. 다음은 표준 페이지의 예입니다 (3 번째 항목 참조). <nav> <ul> <li> <a href="https://stackoverflow.com/"> 홈 </a> </ li> <li> <a href = "/ news "> 뉴스 </a> </ li> <li> <a> 예 </a> </ li> <li> <a href="https://stackoverflow.com/legal"> 법률 </a> </ li> </ ul> </ nav>
— Mohsin

작동하지만 마우스 포인터를 손가락으로 변경하려면 @Rutesh Makhijani의 답변에 제안 된대로 href = "JavaScript : void (0)"을 추가하십시오.
— Tarik

3

나를 위해 일한 유일한 것은 위의 조합이었습니다.

먼저 ul의 li

<li><a onclick="LoadTab2_1()" href="JavaScript:void(0)">All Assigned</a></li>

그런 다음 LoadTab2_1에서 탭 div를 수동으로 전환했습니다.

$("#tabs-2-1").hide();
    $("#tabs-2-2").show();

연결이 끊어지면 탭의 작업이 분리되기 때문입니다.

기본 탭이 변경 될 때 탭 스타일을 수동으로 수행해야합니다.

$("#secTab1").addClass("ui-tabs-active").addClass("ui-state-active").addClass("ui-state-hover").addClass("ui-state-focus");
    $("#secTab1 a").css("color", "#ffffff");


1
<a href="#" onclick="SomeFunction()"  class="SomeClass">sth.</a>

이것은 내 앵커 태그였습니다. onClick = ""이벤트에서 false를 반환하면 여기서 유용하지 않습니다. 방금 href = "#"속성을 제거했으며 아래와 같이 나를 위해 일했습니다.

<a onclick="SomeFunction()"  class="SomeClass">sth.</a>

이 CSS를 추가해야했습니다.

.SomeClass
{
    cursor: pointer;
}

그게 무슨 뜻이야? 권장되는 이유와 이유는 무엇입니까?
— Burk

javascript와 html을 별도의 파일로 유지하는 것이 좋습니다. 자세한 답변은 다음과 같습니다. stackoverflow.com/questions/5871640/…
— Alexandru Severin

1

WordPress 사이트에서이 문제가 발생했습니다. 드롭 다운 메뉴의 헤더에는 항상 속성이 href=""있으며 헤더 플러그인에는 표준 URL 만 사용할 수 있습니다. 가장 쉬운 해결책은 바닥 글 에서이 코드를 실행하는 것입니다.

jQuery('[href=""]').click(function(e){
    e.preventDefault();
});

이렇게하면 빈 앵커가 아무것도하지 못하게됩니다.


0

React는 더 이상 href="javascript:void(0)"앵커 태그에서 이와 같은 기능을 지원하지 않지만 다음은 꽤 잘 작동하는 것입니다.

<a href="#" onClick={() => null} >link</a>

-1

나는 이것이 jQuery 질문으로 태그되어 있다는 것을 알고 있지만 AngularJS로도 대답 할 수 있습니다.

요소에 ng-click 지시문을 추가하고 $ event 변수 인 click 이벤트를 사용하십시오. 기본 동작을 방지하십시오.

<a href="#" ng-click="$event.preventDefault()">

$ event 변수를 함수에 전달할 수도 있습니다.

<a href="#" ng-click="doSomething($event)">

이 기능에서는 클릭 이벤트로 원하는 것을 수행 할 수 있습니다.

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