2011-08-12 4 views
0

링크가있는 목록이 있습니다. 나는 그들에 액세스하기 위해이 코드를 사용하고 있습니다 :onclick 이벤트 처리

function initAll() { 

var allLinks = document.getElementById("nav").getElementsByTagName("a"); 
for (var i=0; i< allLinks.length; i++) { 
    allLinks[i].onmouseover = showPreview; 
    allLinks[i].onmouseout = function() { 
     document.getElementById("previewWin").style.visibility = "hidden"; 
     allLinks[i].onclick=mainProcess; 
     } 
    } 
} 

function mainProcess(evt){ 
    alert(this.value); 
    false; 
} 

이 정확한 코드가 아닙니다, 내가 뭘하려고 오전 내가 링크를 클릭 확인하고 클릭 링크를 기초로 몇 가지 기능을 수행 할 필요가 있다는 것입니다. 코드를 수정할 필요가있는 곳을 모르겠습니다 ... allLinks[i].onclick=mainProcess(this); 줄에 페이지에 오류가 있습니다.

이제 문제는 어떻게 3 가지 이벤트를 모두 처리해야하는지 모르겠다는 것입니다. 이로 변경

답변

0

봅니다 :

for (var i = 0; i < allLinks.length; i++) { 
    allLinks[i].onclick = mainProcess; 
} 

function mainProcess(event) { 
{ 
    alert(this.value); 
    return false; 
} 
+0

를 참조합니다 단순히, this를 사용 당신은 여전히 ​​문제가있을 것이다 -'mainProcess'에 전달 된 인자는 link 객체가 아닌 event 객체가 될 것이다. OP가 링크의 값 속성을 원하면 'alert (this.value);'여야합니다 – Flambino

+0

예, 맞았습니다 : D –

0

당신은 mainProcess(link)이 통과 할 필요가 없습니다. http://www.quirksmode.org/js/events_tradmod.html에 명시된대로 "괄호 안 함!" 및 "this"장. 그것을 확인해 보라, 거기에 예제가있다. 필요한 모든 것이어야합니다.

1

1) 각 링크의 onclick 속성을mainProcess()에 의해 반환 된 값인 으로 설정합니다. 항상 false를 반환합니다. 따라서 실제로는 작성 중입니다. allLinks[i].onclick = false;

2) 이벤트 핸들러를 직접 정의하면 이벤트가 발생할 때 전달되는 인수가 이벤트 객체가됩니다.이 이벤트 객체는 실행 된 요소가 아닙니다.

요소를 파악하려면 이벤트 객체에서 찾거나 할 수 있습니다 (핸들러는 요소 자체에 추가 되었기 때문에) 그 링크 요소

for (var i = 0; i < allLinks.length; i++) { 
    allLinks[i].onclick = mainProcess; 
} 

function mainProcess(event) { 
{ 
    alert(this.value); 
    return false; 
} 
+0

아 !!! 나는 asctually 내가 먼저 onmouseover 다음 onmouseout 및 onclick 사용하고있다. 그래서이 onclick 이벤트에 절대 나가서 .... 실제 코드는 같습니다 : –

+0

var allLinks = document.getElementById ("nav"). getElementsByTagName ("a "); for (var i = 0; i

+0

함수 initAll() { \t \t var allLinks = document.getElementById ("nav"). getElementsByTagName ("a"); \t for (var i = 0; i