2013-04-10 3 views
0

나는 이번 달의 달력을 가지고 있으며 onclick 이벤트에 대한 다른 정보를 입력 할 수있는 새 창을 열어야합니다. 그래서 나는 onclick() 이벤트를 여러 div에 설정하는 for 루프를 가지고있다. title 속성은 클릭 된 날짜를 유지한다. 이것은 내 코드이지만 클릭 한 달의 날짜와 상관없이 동일합니다.onclick 이벤트에서 루프를 설정하는 루프

window.onload = function() { 
'use strict'; 
var i = 0, newAppt, infoGet; 

newAppt = document.getElementsByTagName('div'); 
for (i = 0; i < newAppt.length; i++) { 
    if (newAppt[i].getAttribute('title') !== '') { 
     infoGet = newAppt[i].getAttribute('title'); 
     newAppt[i].addEventListener('click', newApptWin(infoGet), false); 
    } 
} 
}; 
function newApptWin(infoGet) { 
'use strict'; 
window.open(infoGet,'test','toolbar=0');  
} 

도움이 필요하십니까? 감사!

답변

1

귀하의 코드는 페이지가로드 될 때 newApptWin (infoGet) 함수를 즉시 실행하며 변경되지 않습니다. 함수의 결과가 아닌 eventListener에 함수를 전달해야합니다 (여기에서 수행 한 것). (이 잘못 업데이트)

newAppt[i].addEventListener('click', function() {newApptWin(infoGet);}, false); 

편집 : 당신과 같이 고칠 수 for 루프 내에서

선언 infoGet. 전체 스크립트를

window.onload = function() { 
'use strict'; 
var i = 0, newAppt; 

newAppt = document.getElementsByTagName('div'); 
for (i = 0; i < newAppt.length; i++) { 
    if (newAppt[i].getAttribute('title') !== '') { 
     var infoGet = newAppt[i].getAttribute('title'); 
     newAppt[i].addEventListener('click', function() {newApptWin(infoGet);}, false); 
    } 
} 
}; 
function newApptWin(infoGet) { 
'use strict'; 
window.open(infoGet,'test','toolbar=0');  
} 

또는 완전히 infoGet를 생략하고 잠재적 인 메모리 누수 방지 할 수 있습니다 : 나는 대한의 CONSOLE.LOG을 수행 할 때

window.onload = function() { 
'use strict'; 
var i = 0, newAppt; 

newAppt = document.getElementsByTagName('div'); 
for (i = 0; i < newAppt.length; i++) { 
    if (newAppt[i].getAttribute('title') !== '') { 
     var infoGet = newAppt[i].getAttribute('title'); 
     newAppt[i].addEventListener('click', newApptWin, false); 
    } 
} 
}; 
function newApptWin() { 
'use strict'; 
window.open(this.getAttribute('title'),'test','toolbar=0');  
} 
+0

:

newAppt[i].addEventListener('click', function() {newApptWin(newAppt[i].getAttribute('title'));}, false); 

편집 (2) 루프 제목 속성을 잘 볼 수 있습니다. 내 divs 중 하나를 클릭하면 console.log는 null을 제공합니다. 내가 뭘 잘못하고 있니? – Alex

+0

업데이트 된 답변, 더 많은 문제가 발견되었습니다. – Populus

+0

이전에 그런 코드가 있었는데 for 루프에서 호출 되었기 때문에 함수는 36 개의 창을 열려고합니다. 그리고 for 루프에서 infoGet 변수를 선언해도 아무런 변화가 없습니다. – Alex

관련 문제