링크를 사용하여 JavaScript를 호출하는 방법은 무엇입니까?


166

링크를 사용하여 JavaScript 코드를 호출하는 방법은 무엇입니까?

답변:


192
<a onclick="jsfunction()" href="#">

또는

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

편집하다:

위의 답변은 실제로 좋은 해결책이 아니며 처음 게시 한 이후 JS에 대해 많이 배웠습니다. 이 문제를 해결하는 더 나은 방법은 아래 의 멸종 위기에 처한 답변을 참조하십시오 .


11
첫 번째 페이지가 페이지 상단으로 스크롤되므로 두 번째 문서를 추천합니다.
매트 그란데

7
"false return"을 추가하지 않으면 분명히 그렇습니다. 당신의 기능 후에.
Chelsea

26
이것은 1998 코드입니다. 눈에 띄지 않는 솔루션 중 하나를 사용하십시오. 부디.
앤드류 헤지스

7
둘 다 사용하지 마십시오! 링크는 링크를위한 것이며 자바 스크립트를 호출하는 더미 요소가 아닙니다.
I.devries

4
자바 스크립트를 인라인으로 넣을 계획이라면 다음과 같이하십시오 : <a onclick="jsfunction;return false" href="linkasnormal">
Fire Crow

201

눈에 잘 띄지 않는 JavaScript, 라이브러리 종속성 없음 :

<html>
<head>
    <script type="text/javascript">

        // Wait for the page to load first
        window.onload = function() {

          //Get a reference to the link on the page
          // with an id of "mylink"
          var a = document.getElementById("mylink");

          //Set code to run when the link is clicked
          // by assigning a function to "onclick"
          a.onclick = function() {

            // Your code here...

            //If you don't want the link to actually 
            // redirect the browser to another page,
            // "google.com" in our example here, then
            // return false at the end of this block.
            // Note that this also prevents event bubbling,
            // which is probably what we want here, but won't 
            // always be the case.
            return false;
          }
        }
    </script>
</head>
<body>
    <a id="mylink" href="http://www.google.com">linky</a>        
</body>
</html>

26
왜 이것이 현재 받아 들여지는 대답보다 나은지, 스크립트가 페이지에서 어디로 가야하는지 설명 할 수 있습니까 (초급 질문이기 때문에)?
Bill the Lizard

8
확실한 것. 업데이트되었습니다.
멸종 위기에 처한

6
따라서 href사용자를 리디렉션하고 싶지 않고 코드를 실행하려면 어떻게해야합니까? 편집 : 비워 둘 수 있음을 알았습니다 href="".
SabreWolfy

6
이유는 추가하는 것이 좋습니다 onclick를 통해 이벤트를 window.onload하기보다는 퍼팅 onclick에 직접 <a>태그?
Nathan Reed

10
우려되는 기능 중 하나는 기능 작업 단위를 소스 파일의 다른 물리적 위치로 나누거나 많은 소스 파일에 분산시키지 않으려는 경우 href 태그에 자바 스크립트 호출을 넣으면 무슨 일이 일어나고 있는지 한 줄을 보면 고통 스럽습니다. 나는 그 기능을 다른 물리적 장소로 분리하는 것에 대해 걱정할 것입니다. 어쩌면 그것은 내 스타일 일뿐입니다.
stu

47
<a href="javascript:alert('Hello!');">Clicky</a>

몇 년 후 편집 : NO! 이러지마! 나는 젊고 바보였습니다!

다시 한 번 편집 : 두 사람이 이렇게하지 말아야 하는지 물었습니다 . 몇 가지 이유가 있습니다.

  1. 프리젠 테이션 : HTML은 프리젠 테이션에 중점을 두어야합니다. JS를 HREF에 넣는 것은 HTML이 이제 비즈니스 로직을 다루는 것을 의미합니다.

  2. 보안 : HTML의 Javascript는 콘텐츠 보안 정책 (CSP) 을 위반 합니다. CSP (콘텐츠 보안 정책)는 XSS (Cross-Site Scripting) 및 데이터 삽입 공격을 비롯한 특정 유형의 공격을 탐지하고 완화하는 데 도움이되는 추가 보안 계층입니다. 이러한 공격은 데이터 도용에서 사이트 손상 또는 맬웨어 배포에 이르는 모든 것에 사용됩니다. 자세한 내용은 여기를 참조하십시오 .

  3. 접근성 : 앵커 태그는 다른 문서 / 페이지 / 리소스에 연결하기위한 것입니다. 링크가 아무데도 가지 않으면 버튼이어야합니다 . 따라서 화면 판독기, 점자 단말기 등이 상황을 파악하고 시각 장애가있는 사용자에게 유용한 정보를 제공하기가 훨씬 쉽습니다.


16
이 방법의 문제점에 대한 설명이 있습니까? 이보다 더 나쁘다 href='#'alert()에서 onclick?
Thomas Ahle

3
나는 자바 스크립트를
처음 접했고

1
안녕하세요, 왜 이것을 사용하지 않는지 확실하지 않습니까? JS 함수를 호출 해야하는 시나리오에 갇혀 있지만 지정할 수있는 것은 링크입니다. 그리고 당신의 해결책은 효과가있었습니다.
skapie19 2016 년

43

그리고 jQuery에 방해가되지 않는 이유는 무엇입니까?

  $(function() {
    $("#unobtrusive").click(function(e) {
      e.preventDefault(); // if desired...
      // other methods to call...
    });
  });

HTML

<a id="unobtrusive" href="http://jquery.com">jquery</a>

2
크롤러가 링크를 찾아서 따라갈 수 있도록 SEO에서 작동합니까?
Ahi Tuna

11
모든 사람이 jquery를 사용하는 것은 아닙니다.
stu

1
@GregMiernicki 예, 아니오 링크의 의미에 따라 다릅니다. HTML을보십시오. 웹 크롤러 또는 자바 스크립트가 꺼져있는 클라이언트는 지정된 HREF를 방문합니다. Javascript 사용 가능 클라이언트는 클릭 조치를 실행하고 해당 함수가 false 값을 리턴하지 않거나 preventDefault를 호출하지 않으면 링크를 따릅니다. 이 경우, HREF는 "이 눈에 거슬리지"라고 따라서 왜, 대체입니다
에반 랑 그르

12

눈에 잘 띄지 않는 Javascript에는 많은 장점이 있습니다. 여기에 필요한 단계와 사용하기 쉬운 이유가 있습니다.

  1. 링크는 정상적으로로드됩니다.

    <a id="DaLink" href="http://host/toAnewPage.html"> 여기를 클릭 </a>

이것은 자바 스크립트가 활성화되지 않은 브라우저에서 작동하거나 자바 스크립트 코드에 작동하지 않는 오류가있는 경우에 중요합니다.

  1. 자바 스크립트는 페이지로드시 실행됩니다.

     window.onload = function(){
            document.getElementById("DaLink").onclick = function(){
                   if(funcitonToCall()){
                       // most important step in this whole process
                       return false;
                   }
            }
     }
  2. javascript가 성공적으로 실행되면 현재 페이지의 내용을 javascript로로드하면 false가 반환되면 링크 실행이 취소됩니다. 즉, return false를 입력하면 자바 스크립트가 성공적으로 실행 된 경우 링크를 비활성화하는 효과가 있습니다. 자바 스크립트가 실행되지 않는 경우 실행되도록 허용하면서 검색 엔진의 경우와 코드가 깨지거나 자바 스크립트가 아닌 시스템에서 볼 수 있도록 콘텐츠를 멋지게 백업합니다.

주제에 관한 최고의 책은 Jeremy Keith의 "Dom Scription"입니다.


9

또는 PrototypeJS를 사용하는 경우

<script type="text/javascript>
  Event.observe( $('thelink'), 'click', function(event) {
      //do stuff

      Event.stop(event);
  }
</script>

<a href="#" id="thelink">This is the link</a>

1
이벤트 처리 기능을 인라인으로 넣을 필요가 없습니다.
Mark Biek

1
갈 수있는 유일한 방법입니다. 인라인 답변에 투표하십시오. 요즘 변명의 여지가없는 관행입니다.
Andrew Hedges

5
@Andrew : 인라인 답변이 왜 나쁜지 설명하는 downvote와 함께 의견을 남겨주십시오.
Bill the Lizard

8

onclick다음과 같이 이벤트를 사용할 수 있다고 생각합니다 .

<a onclick="jsFunction();">

0

@query_lucky answer jquery와 함께 사용하여

$('#unobtrusive').on('click',function (e) {
    e.preventDefault(); //optional
    //some code
});

HTML 코드 :

<a id="unobtrusive" href="http://jquery.com">jquery</a>

-2

그냥 자바 스크립트를 사용하십시오 : ---- exemplale

javascript:var JFL_81371678974472 = new JotformFeedback({ formId: '81371678974472', base: 'https://form.jotform.me/', windowTitle: 'Photobook Series', background: '#e44c2a', fontColor: '#FFFFFF', type: 'false', height: 700, width: 500, openOnLoad: true })
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.