onclick이 실행되면 HREF를 비활성화하려면 어떻게해야합니까?


95

및 속성 이 모두 설정된 앵커가 있습니다 . 클릭하고 Javascript가 활성화되어 있으면 실행 하고 무시 하고 싶습니다 . 마찬가지로 Javascript가 비활성화되었거나 지원되지 않는 경우 URL 을 따르고 . 다음은 JS를 실행하고 동시에 링크를 따라가는 작업의 예입니다 (일반적으로 JS가 실행 된 다음 페이지가 변경됨).HREFONCLICKONCLICKHREFHREFONCLICK

<A HREF="http://example.com/no-js-login" ONCLICK="yes_js_login()">Log in</A>

이를 수행하는 가장 좋은 방법은 무엇입니까?

Javascript 답변을 기대하고 있지만 작동하는 한 모든 방법을 수락합니다. 특히 PHP로 수행 할 수있는 경우에는 더욱 그렇습니다. 나는 이미 " 자바 스크립트 onclick 함수가 완료 될 수 있기 전에 href 링크가 실행되고 페이지를 리디렉션 "을 읽었 지만 지연 될뿐 HREF완전히 비활성화하지는 않습니다. 또한 훨씬 더 간단한 것을 찾고 있습니다.


4
나는 href가있는 하나와없는 하나를 고정하는 데 사용합니다. 페이지로드시 자바 스크립트가 활성화되어 있는지 확인하고 올바른 앵커가 표시되면 다른 앵커를 표시합니다.
ewein 2013 년

1
@ewein 왜? 단순한 기능에 대한 엄청난 마크 업처럼 들립니다.
Supuhstar 2015 년

답변:


58

onclick속성 에서 return을 먼저 넣으면 편집되지 않은 첫 번째 솔루션을 사용할 수 있습니다 .

<a href="https://example.com/no-js-login" onclick="return yes_js_login();">Log in</a>

yes_js_login = function() {
     // Your code here
     return false;
}

예 : https://jsfiddle.net/FXkgV/289/


1
나는 이것이 얼마나 깨끗한 지 좋아합니다! 그러나, 허용 솔루션은 나에게로 HREF는 무시되어 있는지 여부를 더 제어 할 수 있습니다
Supuhstar

지난 몇 년 동안 저는 제 마음을 바꿨습니다. 이것이 더 나은 솔루션입니다
Supuhstar 2017-10-12

얼마나 건전한가!
DrunkDevKek

그러나 이것은 JSX 반응에서 작동하지 않습니다. 작동할까요?
Coder

1
이것은 많은 시간을 절약했습니다.
Mark Lozano

61
    yes_js_login = function() {
         // Your code here
         return false;
    }

false를 반환하면 기본 작업 (href로 이동)을 방지해야합니다.

편집 : 작동하지 않는 것 같습니다. 대신 다음을 수행 할 수 있습니다.

<a href="http://example.com/no-js-login" onclick="yes_js_login(); return false;">Link</a>

1
수정 된 답변은 실제 링크를 제거하므로 질문에 대한 답변이 아닙니다.
Itai Bar-Haim

12
선택적으로 사용 onclick="return yes_js_login();"하여 yes_js_login반환false
우베 클라 이네 - 코닉

1
@cgogolin은 내 대답을 참조하십시오.
Gabe Rogan

여전히 붙어 사람이 줄 추가 5 월event.stopImmediatePropagation()
didxga

33

기본 브라우저 동작을 비활성화 preventDefault하고 eventHTML 내에서 전달하기 만하면 됩니다.

<a href=/foo onclick= yes_js_login(event)>Lorem ipsum</a>

yes_js_login = function(e) {
  e.preventDefault();
}

1
반환 거짓이 솔루션은 작업 ... 감사 한 위 ... 폴리머에서 작동하지 않았다
파라 Sachapara을

16
<a href="http://www.google.com" class="ignore-click">Test</a>

jQuery 사용 :

<script>
    $(".ignore-click").click(function(){
        return false;
    })
</script>

JavaScript로

<script>
        for (var i = 0; i < document.getElementsByClassName("ignore-click").length; i++) {
            document.getElementsByClassName("ignore-click")[i].addEventListener('click', function (event) {
                event.preventDefault();
                return false;
            });
        }
</script>

원하는 .ignore-click만큼의 요소에 클래스 를 할당 하고 해당 요소를 클릭하면 무시됩니다.


이것은 훌륭한 솔루션입니다! 클릭했을 때 가상 클래스 .btn-loading가 클릭 된 링크에 추가되는 버튼에 사용했습니다. 성공하면 체크 표시 (오류시 X)가 로딩 애니메이션을 대체합니다. 어떤 경우에는 (성공과 오류 모두) 버튼이 다시 클릭되는 것을 원하지 않습니다. 이것을 사용 $(elemnent).addClass('disabled')하면 우아하게 보았던 기능을 간단 하고 쉽게 얻을 수 있습니다 !
Matthew Mathieson

14

다음과 같은 간단한 코드를 사용할 수 있습니다.

<a href="" onclick="return false;">add new action</a><br>

5

다음과 같은 이벤트 매개 변수를 전달하면 더 간단합니다.

<a href="#" onclick="yes_js_login(event);">link</a>
function yes_js_login(e) {
    e.stopImmediatePropagation();
}

1
그것은 나를 위해 작동하지 않습니다. e.preventDefault ()를 사용해야합니다.
Milan Simek

2

도움이 될 수 있습니다. JQuery가 필요하지 않습니다.

<a href="../some-relative-link/file" 
onclick="this.href = 'https://docs.google.com/viewer?url='+this.href; this.onclick = '';" 
target="_blank">

이 코드는 다음을 수행합니다. Google 문서 뷰어에 대한 상대 링크 전달

  1. 앵커의 전체 링크 버전을 얻으십시오. this.href
  2. 새 창에서 링크를 엽니 다.

따라서 귀하의 경우 이것은 작동 할 수 있습니다.

<a href="../some-relative-link/file" 
onclick="this.href = 'javascript:'+console.log('something has stopped the link'); " 
target="_blank">

1

js 함수가 호출 요소에 대한 참조를 필요로하는 일반 URL 또는 자바 스크립트 호출을 대신 처리 할 요소에 대한 템플릿이 필요한 상황을 해결했습니다. 자바 스크립트에서 "this"는 양식 요소 (예 : 버튼)의 컨텍스트에서만 자체 참조로 작동합니다. 나는 버튼이 아니라 일반 링크의 모양 만 원하지 않았습니다.

예 :

<a onclick="http://blahblah" href="http://blahblah" target="_blank">A regular link</a>
<a onclick="javascript:myFunc($(this));return false" href="javascript:myFunc($(this));"  target="_blank">javascript with self reference</a>

href 및 onClick 속성은 동일한 값을 갖지만 자바 스크립트 호출 일 때 onClick에 "return false"를 추가합니다. 호출 된 함수에서 "return false"가 작동하지 않았습니다.


왜 두 개입니까? 왜 JS를 넣는가 HREF?
Supuhstar

Supuhstar, 실제 코드는 동적이며 자바 스크립트이며 외부에서 정의 된 수백 개의 항목에 대해 <a> 요소를 생성합니다. 각 항목은 정적 링크 주소를 지정하며 생성 된 <a> 요소는 일반 "href 동작"을 사용해야합니다. 또는 항목에 대한 자바 스크립트 함수 호출이 지정되며,이 경우 <a> 요소의 동작은 요소의 컨텍스트를 기반으로 계산됩니다. 그리고 <a> 생성기의 코드에서 링크 주소인지 자바 스크립트 함수 호출인지 테스트하지 않고 각 요소에 지정된 것을 복사하고 싶었습니다.
Bo Johanson 2014 년

이것이 내 질문에 어떻게 대답하는지 이해하지 못합니다. 내가 수백 개의 링크를 원한다고 누가 말했습니까? 이 모든 것의 요점을 이해하지 못합니다. 방금 말한 것의 절반도 이해하지 못합니다.
Supuhstar 2014 년

0

이것은 나를 위해 일했습니다.

<a href="" onclick="return false;">Action</a>

답변 해 주셔서 감사합니다. Stack Exchange에 오신 것을 환영합니다! 불행히도 이전 답변이 이미 이것을 제안한 것처럼 보이기 때문에 이것은 새로운 지식을 추가하지 않는 것 같습니다. 동의하면 찬성하는 것이 좋습니다. 동의하지 않으면 새로운 지식이 드러나도록 답변을 수정하세요!
Supuhstar

0

제 경우에는 사용자가 "a"요소를 클릭 할 때 조건이있었습니다. 조건은 다음과 같습니다.

다른 섹션에 10 개 이상의 항목이있는 경우 사용자는 다른 페이지로 리디렉션되지 않아야합니다.

다른 섹션에 항목이 10 개 미만인 경우 사용자는 다른 페이지로 리디렉션되어야합니다.

"a"요소의 기능은 다른 구성 요소에 따라 다릅니다. 클릭 이벤트 내의 코드는 다음과 같습니다.

var elementsOtherSection = document.querySelectorAll("#vehicle-item").length;
if (elementsOtherSection> 10){
     return true;
}else{
     event.preventDefault();
     return false;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.