하이퍼 링크 클릭시 자바 스크립트 함수 호출


답변:


134

더 깔끔하게, typical href="#"또는 href="javascript:void"또는 대신 href="whatever"이것이 훨씬 더 의미가 있다고 생각합니다.

var el = document.getElementById('foo');
el.onclick = showFoo;


function showFoo() {
  alert('I am foo!');
  return false;
}

<a href="no-javascript.html" title="Get some foo!" id="foo">Show me some foo</a>

Javascript가 실패하면 피드백이 있습니다. 또한 비정상적인 동작 (의 경우 페이지 점프,의 경우 href="#"동일한 페이지 방문 href="")이 제거됩니다.


13
+1 이것은 현재 유일하게 눈에 거슬리지 않는 대답입니다. 내가 할 수 있다면 +100.
James

@Lewis, 예, 이상적으로는 <a> 태그는 순수한 js 호출에 사용되지 않지만 불행히도 이전 브라우저는 링크가 아닌 요소에 대해 : hover를 지원하지 않았습니다. 따라서 링크는 종종 js 이벤트를 트리거하는 데 사용되었습니다.
Chris Van Opstal

@Chris-나는 당신이 내 요점 Chris를 이해하지 못합니다. <a href="#"> 아무것도하지 않음 </a>을 사용하지 않고 대신 <a href="a/link/somwhere.html"> 무엇인가 </a>를 사용한 다음 href를 재정의하는 점진적 향상. 이것이 가장 깨끗한 솔루션입니다. 앵커는 괜찮지 만 자바 스크립트가 비활성화 된 경우 또는 어떤 이유로 (IE6에 따라) 핸들러가 생성되고 할당되기 전에 일부 자바 스크립트가 중단 된 경우 SOMETHING을 수행해야합니다. 이렇게하면 모든 사용자가 만족합니다.
Lewis

2
나를 위해 작동하지 않고 페이지로드시 onclick 기능을 자동으로 실행합니다. 이것은 또한 접근성과 관련된 악몽처럼 보입니다.
Shawn Solomon

4
작동하지 않고 href URL로 연결됩니다.
paddotk 2014 년

59

가장 간단한 대답은 ...

<a href="javascript:alert('You clicked!')">My link</a>

또는 자바 스크립트 함수 호출에 대한 질문에 답하려면 :

<script type="text/javascript">
function myFunction(myMessage) {
    alert(myMessage);
}
</script>

<a href="javascript:myFunction('You clicked!')">My link</a>


2
StackOverflow 'Run code snippet'의 링크는 Firefox에서 작동하지 않지만 (경고가 생성되지 않음) 일반 웹 페이지에 이러한 유형의 링크를 배치하면 FF에서 작동합니다.
the_pwner224

예, 이상합니다. 저에게 효과가 있었지만 지금은 그렇지 않습니다. 다른 사람들은 비슷한 문제를 겪고 있었고 Firefox를 완전히 재설치하는 것 외에는 확실한 해결책이없는 것 같습니다.
Jayden Lawson

26

onclick 매개 변수를 사용하면 ...

<a href='http://www.google.com' onclick='myJavaScriptFunction();'>mylink</a>

혼란스러운 진술. google.com에 가거나 javascript 함수를 호출합니까? 어느 것이 우선입니까?
Nguai al

12

JQuery 대답. JQuery를 개발하기 위해 JavaScript가 발명 되었기 때문에 다음과 같이 JQuery에서 예제를 제공합니다.

<div class="menu">
    <a href="http://example.org">Example</a>
    <a href="http://foobar.com">Foobar.com</a>
</div>

<script>
jQuery( 'div.menu a' )
    .click(function() {
        do_the_click( this.href );
        return false;
    });

// play the funky music white boy
function do_the_click( url )
{
    alert( url );
}
</script>

53
jQuery를 개발하기 위해 JavaScript가 발명 되었습니까? 그것은 새로운 것입니다!
palswim 2010

35
이것은 레고가 레고 배트맨을 만들기 위해 발명되었다는 것을 읽는 것과 같았습니다.
Shawn Solomon

5
내가 행복 @ShawnSolomon 우리는 : 동의
elcuco

1
@elcuco, 큰 풍자! + 'd :) Long Live JQuery
Zuul

6

나는 자바 스크립트 하이퍼 링크에 href보다는 onclick 메소드를 사용하는 것을 선호합니다. 그리고 항상 경고를 사용하여 어떤 가치가 있는지 확인하십시오.

<a href='#' onclick='jsFunction();alert('it works!');'>Link</a>

입력 태그에도 사용할 수 있습니다.

<input type='button' value='Submit' onclick='jsFunction();alert('it works!');'>


3

이상적으로는 각 링크의 '마크 업'을 변경할 때마다 코드를 다시 컴파일해야하므로 코드 뒤에 링크를 생성하지 않는 것이 좋습니다. 당신이 그것을해야한다면 나는 당신의 자바 스크립트 '호출'을 HTML에 포함시키지 않을 것입니다. 그것은 모두 나쁜 습관입니다. 마크 업은 그것이하는 일이 아니라 문서를 설명해야합니다. 그게 당신의 자바 스크립트의 일입니다.

각 요소 (또는 공통 기능인 경우 클래스)에 대한 특정 ID가있는 접근 방식을 사용하고 다음과 같이 Progressive Enhancement를 사용하여 이벤트 핸들러를 추가합니다.

[c# example only probably not the way you're writing out your js]
Response.Write("<a href=\"/link/for/javascriptDisabled/Browsers.aspx\" id=\"uxAncMyLink\">My Link</a>");

[Javascript]  
document.getElementById('uxAncMyLink').onclick = function(e){

// do some stuff here

    return false;
    }

이렇게하면 JS가 비활성화 된 사용자에게 코드가 손상되지 않으며 우려 사항이 명확하게 구분됩니다.

그것이 사용되기를 바랍니다.


1
왜 C #인가? 왜 안돼 <a href="https://stackoverflow.com/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>?
Mahmoodvcs

2

일반적으로 onclick 이벤트를 직접 설정하는 것보다 element.attachEvent (IE) 또는 element.addEventListener (다른 브라우저)를 사용하는 것이 좋습니다. 후자는 해당 요소에 대한 기존 이벤트 핸들러를 대체하기 때문입니다.

attachEvent / addEventListening을 사용하면 여러 이벤트 핸들러를 만들 수 있습니다.


1

onclickHTML 속성을 사용 합니다 .

onclick이벤트 핸들러는되는 요소에 대한 사용자의 마우스 버튼의 클릭 이벤트 캡처 onclick속성이 적용됩니다. 이 작업은 일반적으로 JavaScript 함수 [...]와 같은 스크립트 메서드를 호출합니다.


1

페이지가로드 될 때까지 기다리지 않으면 ID로 요소를 선택할 수 없습니다. 이 솔루션은 코드 실행에 문제가있는 모든 사용자에게 적합합니다.

<script type="text/javascript">
window.onload = function() {
    document.getElementById("delete").onclick = function() {myFunction()};

    function myFunction() {
        //your code goes here
        alert('Alert message here');
    }
};
</script>

<a href='#' id='delete'>Delete Document</a>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.