JavaScript에서 href 링크를 비활성화하려면 어떻게합니까?


107

태그가 <a href="#"> Previous </a> 1 2 3 4 <a href="#"> Next </a>있고 어떤 조건에서는이 태그를 완전히 비활성화하고 싶습니다.

주석의 코드 (링크가 생성되는 방법)

if (n_index != n_pages) 
    a = a+'<li><a href="#" onclick="javascript:paginateAjaxPage('+(n_index+1) +','+stype+');">></a></li><li><a href="#" onclick="javascript:paginateAjaxPage('+n_pages+','+stype+');" >>></a></li>'; 
else 
    a = a+'<li><a style="cursor: pointer;" onclick="return false;">></a></li><li><a style="cursor: pointer;" onclick="return false" >>></a></li>'; 
a = a+'</ul></div>';

일부 조건에서이 태그를 완전히 비활성화하고 싶습니다. 이것은 무엇을 의미합니까? 어떤 조건?
Felix Kling 2011 년

1
비활성화하면 텍스트가 여전히 링크 (밑줄 및 모든 것)로 표시 되길 원하지만 클릭 할 때 아무 작업도 수행하지 않음을 의미합니까?
그림자 마법사가 당신을 위해 귀입니다

답변:


190

사용자가 클릭시 리디렉션하는 것을 원하지 않을 때 시도하십시오.

<a href="javascript: void(0)">I am a useless link</a>

54
어때요 <a href='javascript:;'>I am a shorter useless link</a>?
Charlie Schliesser 2013 년

16
세미콜론도 필요하지 않습니다.
mVChr 2014

44
웹 개발자는 수백만 개의 탭 \t, 줄 바꿈 \n및 공백을 넣어 코드가 접혀 있고 멋진 (누구를 위해? 브라우저)보기 위해 이제 7 바이트 void(0)및 / 또는 ;, o 신에 대해 걱정하고 있습니다.

3
위의 의견에 약간 동의하지 않습니다. 때로는 설명이 필요하고 다른 경우에는 더 간단하고 기억하기 쉬워야합니다. "javascript :"를 선호합니다.
Lamy

2
제 생각에는 Millions millions of tabs\t, line feeds\n and spaces-예, 이것은 코드를 이해하기 쉽게 만들지 void(0)만 그렇지 않습니다. 이것이 이것이 제거되어야하거나 가능한 한 짧아야하는 이유입니다. 예를 들어 여기서 짧게- "압축"또는 바이트 ecomony가 아닌 이해 (읽기) 용입니다. :)
Cherry

71

이 스타일 클래스를 사용하여 페이지의 모든 링크를 비활성화 할 수 있습니다.

a {
    pointer-events:none;
}

이제 당연히 요령은 필요할 때만 링크를 비활성화하는 것입니다.

다음과 같이 빈 A 클래스를 사용하십시오.

a {}

그런 다음 링크를 비활성화하려면 다음을 수행하십시오.

    GetStyleClass('a').pointerEvents = "none"

    function GetStyleClass(className)
    {
       for (var i=0; i< document.styleSheets.length; i++) {
          var styleSheet = document.styleSheets[i]

          var rules = styleSheet.cssRules || styleSheet.rules

          for (var j=0; j<rules.length; j++) {
             var rule = rules[j]

             if (rule.selectorText === className) {
                return(rule.style)
             }
          }
       }

       return 0
    }

참고 : CSS 규칙 이름은 일부 브라우저에서 소문자로 변환되며이 코드는 대소 문자를 구분하므로 소문자 클래스 이름을 사용하는 것이 좋습니다.

링크를 다시 활성화하려면 :

GetStyleClass('a').pointerEvents = ""

브라우저 호환성에 대한 정보는 http://caniuse.com/pointer-events 페이지를 확인하십시오 .

나는 이것이 최선의 방법이라고 생각하지만 슬프게도 IE는 항상 그렇듯이 허용하지 않을 것입니다 :) 어쨌든 유용 할 수있는 정보가 포함되어 있고 일부 프로젝트는 알고있는 브라우저를 사용하기 때문에 나는 이것을 게시하고 있습니다. , 모바일 장치에서 웹보기를 사용할 때와 같습니다.

하나의 링크를 비활성화하고 싶다면 (그게 질문이라는 것을 깨달았습니다), 해당 조건에 따라 현재 페이지의 URL을 수동으로 설정하거나 설정하지 않는 기능을 사용합니다. (당신이 수락 한 해결책처럼)

이 질문은 내가 생각했던 것보다 훨씬 쉬웠습니다. :)


3
pointer-events:none;나는 그 태그에 대해 전혀 몰랐던 것에 대해 감사해야 합니다. 매우 편리합니다!
Johnathan Brown

3
이것은 환상적이지만 포인터 이벤트는 버전 11 이전의 IE에서는 지원되지 않는다는 점에 주목할 가치가 있습니다. caniuse.com/#feat=pointer-events
JakeRobb 2015

2
이 페이지에서 글로벌 스타일을 편집하여 시도했지만
찬성

굉장했습니다! jquery없이이 작업을 수행하는 방법을 찾기가 어려웠습니다.
Hesam 카키

내 경우에는 동적 인 링크의 href를 변경할 필요가 없기 때문에 CSS 답변이 다른 것보다 더 좋습니다.
Paul

16

간단히 빈 해시를 줄 수 있습니다.

anchor.href = "#";

또는 "사용 안함"으로 충분하지 않은 경우 이벤트 핸들러를 사용하십시오.

anchor.href = "javascript:void(0)";

21
# 권장하지 않는 이유는 무엇입니까? 이것을 고려하면 비활성화 된 링크가 긴 페이지의 하단 / 바닥 글에 표시됩니다. 링크를 클릭하면 맨 위로 "javascript :;"로 이동합니다. 충분합니다
Kumar

3
# 1 위로 가기 스크롤되지 않습니다
Cétia

3
@Bixi, 1나중에 추가되면 ID가있는 요소로 스크롤됩니다 .
ps2goat

네, 분명합니다. id = 1을 만들지 않는다는 것을 알고 있습니다. 그냥 가능한 해결 방법입니다
Cétia

당신이 당신의 현재 페이지와는 다른 <기본> 경우에는이 기능이 작동하지 않습니다
미구엘 Pynto

9

jQuery를 사용하여 시도하십시오.

$(function () {
    $('a.something').on("click", function (e) {
        e.preventDefault();
    });
});

5
anchor.href = null;


1
크롬은 지금이 답변에 대한 페이지 이름이 널 (null)로 이동하려고
OrangeKing89

5
(function ($) {
    $( window ).load(function() {
        $('.navbar a').unbind('click');
        $('.navbar a').click(function () {
            //DO SOMETHING
            return false;
        });
    });
})(jQuery);

이 방법을 구현하기가 더 쉽습니다. 그리고 그것은 당신이 js라는 이점이 있습니다. HTML 내부가 아니라 다른 파일에 있습니다. 바인딩 해제없이 그렇게 생각합니다. 두 이벤트 모두 여전히 활성 상태입니다. 확실하지 않다. 하지만 어떤면에서는이 이벤트 하나만 필요합니다.


1
unbind필요? 나는 믿거 return falsee.preventDefault()충분할 것이다.
Tasos K. 2014

OP 코드의 문제점과 답변을 편집하여 문제 해결되는 이유를 설명 하십시오 .
Baum mit Augen


4

링크를 비활성화하는 가장 쉬운 방법은 단순히 링크를 표시하지 않는 것입니다. 조건이 충족되었는지 테스트하여 이전 단추를 숨기고 싶을 때마다이 함수를 실행하십시오 (조건으로 대체 if (true)).

var testHideNav = function() {
    var aTags = document.getElementsByTagName('a'),
        atl = aTags.length,
        i;

    for (i = 0; i < atl; i++) {
        if (aTags[i].innerText == "Previous") {
            if (true) { // your condition to disable previous
                aTags[i].style.visibility = "hidden";
            } else {
                aTags[i].style.visibility = "visible";
            }
        } else if (aTags[i].innerText == "Next") {
            if (false) { // your condition to disable next
                aTags[i].style.visibility = "hidden";
            } else {
                aTags[i].style.visibility = "visible";
            }
        }
    }
};

그런 다음 testHideNav()상태가 변경되었는지 확인해야 할 때마다 실행 하십시오.


3

대신 span 및 javascript onclick을 사용하십시오. 일부 브라우저는 링크와 "#"href가 있으면 "점프"합니다.


예를 들어 주시겠습니까? 일부 브라우저는 "점프"는 사실이다 .. :)
Arup에 Rakshit

만나서 반갑습니다, @ArupRakshit =) 수락 된 답변은 javascript: void(0);또는 javascript:;. Rails에서 렌더링하는 경우 비활성화하려는 위치 대신 스팬을 렌더링하면됩니다.
Abdo

3

이것도 가능합니다.

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

링크가 아무데도 가지 않으면 함수가 실행됩니다.


기존 답변을 검토하십시오
ses

3

비슷한 요구가 있었지만 내 동기는 링크가 두 번 클릭되는 것을 방지하는 것이 었습니다. jQuery를 사용하여 수행했습니다.

$(document).ready(function() {
    $("#myLink").on('click', doSubmit);
});

var doSubmit = function() {
    $("#myLink").off('click');
    // do things here
};

HTML은 다음과 같습니다.

<a href='javascript: void(0);' id="myLink">click here</a>

2

따라서 위의 솔루션은 링크가 작동하지 않도록하지만 링크가 더 이상 유효하지 않다는 것을 표시 (AFAICT)하지 마십시오. 일련의 페이지가 있고 현재 페이지를 가리키는 링크를 비활성화 (비활성화되어 있음을 분명히 표시)하려는 상황이 있습니다.

그래서:

window.onload = function() {
    var topics = document.getElementsByClassName("topics");
    for (var i = topics.length-1; i > -1; i-- ) {
        for (var j = topics[i].childNodes.length-1; j > -1; j--) {
             if (topics[i].childNodes[j].nodeType == 1) {
                if (topics[i].childNodes[j].firstChild.attributes[0].nodeValue == this.n_root3) {
                    topics[i].childNodes[j].innerHTML = topics[i].childNodes[j].firstChild.innerHTML;
                }
            }
        }
    }
}

링크 목록을 살펴보고 현재 페이지를 가리키는 링크를 찾은 다음 (n_root3는 로컬 일 수 있지만 document비슷한 것이 있어야 한다고 생각 합니다) 링크를 링크 텍스트 콘텐츠로 바꿉니다.

HTH



0

이 jquery 용 플러그인을 설치하고 사용하십시오.

http://plugins.jquery.com/project/jqueryenabledisable

페이지의 거의 모든 필드를 비활성화 / 활성화 할 수 있습니다.

어떤 조건에서 페이지를 열려면 자바 스크립트 함수를 작성하고 href에서 호출하십시오. 조건이 충족되면 페이지를 열지 않으면 아무 작업도 수행하지 않습니다.

코드는 다음과 같습니다.

<a href="javascript: openPage()" >Click here</a>

and function:
function openPage()
{
if(some conditon)
opener.document.location = "http://www.google.com";
}
}

링크를 div에 넣고 Style 속성의 표시 속성을 none으로 설정할 수도 있습니다. 이것은 div를 숨길 것입니다. 예를 들어,

<div id="divid" style="display:none">
<a href="Hiding Link" />
</div>

링크가 숨겨집니다. 버튼이나 이미지를 사용하여 onclick에서이 함수를 다음과 같이 호출하여이 div를 표시합니다.

<a href="Visible Link" onclick="showDiv()">

and write the js code as:

function showDiv(){
document.getElememtById("divid").style.display="block";
}

html 태그에 id 태그를 넣을 수도 있습니다.

<a id="myATag" href="whatever"></a>

그리고 사용하여 자바 스크립트 에서이 ID를 얻으십시오.

document.getElementById("myATag").value="#"; 

이 중 하나는 확실히 작동해야합니다 하하


0

링크를 비활성화하는 또 다른 방법

element.removeAttribute('href');

href가없는 앵커 태그는 비활성화 / 일반 텍스트로 반응합니다.

<a> w/o href </a>

대신에 <a href="#"> with href </a>

jsFiddel 참조

이것이 무겁기를 바랍니다.


0

void 대신 다음을 사용할 수도 있습니다.

<a href="javascript:;">this link is disabled</a> 

-2

0) 링크와 "#"href가 있으면 일부 브라우저가 "점프"한다는 사실을 기억하십시오. 따라서 가장 좋은 방법은 사용자 정의 JavaScript입니다.

1) 사용자 정의 JavaScript를 사용 하는 경우 다음 과 같습니다.

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

"return false"는 링크가 실제로 추적되는 것을 방지합니다.

2) 다음을 사용하지 않는 것이 좋습니다.

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

또는

  <a href="javascript:;" onclick="DoSomething();">Link</a>

자바 스크립트 의사 프로토콜이 일부 브라우저에서 페이지를 대기 상태로 만들 수 있기 때문에 예기치 않은 결과가 발생할 수 있습니다. IE6는 그것으로 유명합니다. 그러나 IE6에 신경 쓰지 않고 모든 것을 테스트하고 있다면 좋은 해결책이 될 수 있습니다.

3) 이미 가지고 jQuery있고 bootstrap프로젝트에 있다면 다음 과 같이 사용할 수 있습니다.

$('.one-click').on("click", function (e) {
   $( this ).addClass('disabled');
});

.disabled클래스가 부트 스트랩을 형성하는 곳 .

Qupte 양식 부트 스트랩 사이트 ( 여기 )

링크 기능 경고

.disabled 클래스는 pointer-events: nones의 링크 기능을 비활성화하는 데 사용하지만 해당 CSS 속성은 아직 표준화되지 않았습니다. 또한 포인터 이벤트를 지원하는 브라우저에서도 : 없음, 키보드 탐색은 영향을받지 않습니다. 즉, 시력이있는 키보드 사용자와 보조 기술 사용자는 이러한 링크를 계속 활성화 할 수 있습니다. 따라서 안전 tabindex="-1"을 위해 이러한 링크에 속성을 추가하여 (키보드 포커스를받지 custom JavaScript못하도록) 해당 기능을 비활성화 하는 데 사용하십시오.

그리고이 custom JavaScript섹션에 도시 된 1


누군가 그것을 대답으로 넣어야했고, 부트 스트랩 사람들은 이유가 있습니다. 나쁜 생각이라 할지라도 여전히 대답이고 그 생각이 왜 나쁜지에 대한 설명과 함께 대답은 사람들에게 좋은 것을 가져다줍니다.
Yevgeniy Afanasyev

개선 대답 할
예브게니 Afanasyev

-4

비활성화 된 링크에 대한 아래 코드 :

<a href="javascript: void(0)">test disabled link</a> 

또 다른 매우 간단한 해결책은 다음과 같습니다.

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

첫 번째 솔루션은 효율적입니다.


9
게시하기 전에 기존 답변을 검토하십시오. 이러한 옵션은 이미 제안되었습니다. 2 년 전에. 응답 이 기존 답변보다 중요한 내용 을 제공하지 않는 한 오래된 스레드를 부활시키지 않는 것이 가장 좋습니다.
Leigh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.