2013-03-23 3 views
0

각 고유 한 ID가있는 몇 개의 링크가 있습니다. 링크 중 하나가 클릭되면 사용자가 링크 ID를 알리는 알림을받는 단일 함수를 호출하려고합니다. 나는 곤두박질 친다. 여기에 내가 가진거야. 순수한 JavaScript로 이것을하고 싶습니다.알림 사용자가 클릭하는 링크의 ID

내 코드 :

<p><a href="#" id="link0">Link0</a></p> 
<p><a href="#" id="link1">Link1</a></p> 
<p><a href="#" id="link2">Link2</a></p> 
<p><a href="#" id="link3">Link3</a></p> 

<script> 
function test(i) { 
    alert("You just clicked on link:" + i); 
} 

onclick = function() { 
    test(i); 
}; 
</script> 
+0

당신이 한 코드를 요소의 문서 또는 내부의 'A'모든 태그를 잡아와 'id'속성은 '링크'로 시작하면 확인하실 수 있습니다 있어 자바 스크립트에서 일하는 아주 먼 길입니다. 'onclick'은 함수가 아니며 여러분이 작성한 방식에 가까운 어떤 것도 작동하지 않습니다. 여기에있는 답변 중 일부는 도움이 될 것입니다.하지만 아래에서 답변을 붙여 넣으면 코드가 작동하지만 실제로 작동하는 방식을 이해하는 데 도움이되지 않기 때문에 배우기 좋은 자습서를 찾는 것이 좋습니다. – Spudley

+0

ID가 없거나 ID가있는 링크 만 있거나 'link'로 시작하는 ID가있는 링크 만 있거나 특정 종류의 링크가있는 링크 만 페이지에있는 모든 링크에 경고를 표시 하시겠습니까? 태그 (예 : "alertlinks"클래스 또는 "p"태그 인 코드) –

답변

1

는이

var links = document.getElementsByTagName("a"); 

for (var i = 0; i < links.length; i++) { 
    links[i].addEventListener("click", function(e) { 
     e.preventDefault(); 
     alert(this.id); 
    }, false); 
} 

DEMO

+0

해당 코드는 페이지의 다른 부분에 부정적인 영향을 미칩니다. 예를 들어, Home은 아무 것도 경고하지 않고 목적지까지 도달하지 않습니다. –

1

난 그냥 당신이 jQuery를 사용하는 예제를 만들어보십시오.

var elements = document.getElementsByTagName("a"); 
for(var i = 0, length = elements.length; i < length; i++) { 
    elements[i].addEventListener("click", function(e) { 
     e.preventDefault(); 
     alert("You just clicked on link: " + this.id); 
    }, false); 
} 

JSFiddle : 당신이 자바 스크립트 찾고있어 여기

<script src="//code.jquery.com/jquery-1.9.1.js" type="text/javascript" /> 
+0

아니요 jQuery - 요구 사항을 읽습니다. * 순수한 JavaScript로 처리하려고합니다. * –

+0

jQuery는 순수한 자바 스크립트입니다.) – McPepper

+1

질문에 jquery가 지정되어 있지 않습니다. 이는 jquery 솔루션으로 대답해서는 안된다는 것을 의미합니다. 그러나이 경우 질문에 표시된 이해 수준은 jquery가 가장 적합한 대답 일 수 있음을 나타냅니다. 그러나 질문에서 볼 수 있듯이 jquery를 사용하는 방법에 대한 주석을 포함하고 jquery 코드를 제공하는 것보다는 jquery를 사이트에 추가하는 방법에 대한 대답을 편집 할 것을 제안합니다. 그것을 알지 못하면 작동하지 않을 것입니다. – Spudley

0

: http://jsfiddle.net/Yynw9/

$(document).ready(function() { 
    $("a").click(function() { 
     alert(this.id); 
    }); 
}); 

당신이 당신의 헤더에있는 라이브러리를 포함했다 jQuery를 사용하여 http://jsfiddle.net/3R4FA/1/

코드 루프는 먼저 <a> 태그 인 모든 요소를 ​​선택합니다. 그런 다음이 배열을 반복하고 각 항목에 클릭 이벤트 리스너를 추가합니다. this 키워드를 사용하면 이벤트를 트리거 한 요소에 액세스 한 다음 ID를 가져올 수 있습니다.

+0

동일한 답변으로 다른 게시물에서 복사 : "해당 코드는 페이지의 다른 부분에 부정적인 영향을 미칩니다. 예를 들어, Home은 아무런 경고도 표시하지 않으며 목적지까지 도달하지 않습니다." –

+0

예, 분명합니다. 그러나 포스터는 각 링크마다이 작업을 수행하도록 요청했습니다. 기본 동작을 중지하지 않으려면 e.preventDefault()를 제거하거나 연결할 다른 식별자를 제공 할 수 있습니다. 그대로, 이벤트를 첨부 할 다른 식별자가 없습니다. – CodePB

+0

그들 모두는 'key'로 시작하는 id를 가지고 있습니다. 질문에는 모든 id에 'link'가 있습니다. 그리고 ID가 전혀없는 링크에 대해 경고하고 싶습니까? –

0

을 지원하는 브라우저에서는 querySelectorAll을 사용하여 'link'로 시작하는 모든 ID를 가져올 수 있습니다. 또는 기존 브라우저에서 getElementsByClassName ..을 사용하여 클래스를 추가 할 수 있지만 해결책은 깨끗하지 않지만 ...

function test(i) { 
    alert("You just clicked on link:" + this.id); 
} 
if (document.querySelectorAll('a[id^="link"]')) { 
    var elements = document.querySelectorAll('a[id^="link"]'); 
    var i = 0; 
    for (i = 0; i < elements.length; i += 1) { 
     elements[i].onclick = test; 
    } 
} else { 
    var elements = document.getElementsByTagName('a'); 
    var i = 0; 
    for (i = 0; i < elements.length; i += 1) { 
     if (elements[i].id.substr(0,4) === 'link') { 
      elements[i].onclick = test; 
     } 
    } 
} 

http://jsfiddle.net/Xvwme/3/

관련 문제