이것은 나를 미치게합니다. SVG 객체에 이벤트 리스너를 추가하는 루프가 있습니다. 객체는 인수를 위해 작은 원이며 10 개의 원마다 마우스 오버 및 마우스 아웃 이벤트를 추가해야합니다.addEventListener에 이벤트를 전달할 수 없습니다. closure issue
첫 번째 문제점은 표준 클로저 스코프입니다. 모든 리스너가 동일한 루프에 추가되었으므로 모두 동일한 루프 변수의 잘못된 값을 보게됩니다. 이 문제를 해결할 수는 있지만 두 번째 문제는 청취자에게 '이벤트'를 전달해야한다는 것입니다.이 두 가지 문제를 동시에 해결할 방법을 찾을 수 없습니다.
나는이의 다양한 버전을 시도했다 :
for(month = 0; month < nMonths; month++) {
...
shape.addEventListener(
"mouseover",
(function(event, index) { popup_on(event, foo, index); })(event, month),
false);
group.appendChild(shape);
}
이 특정 버전 '이벤트가 정의되지 않은'날 수 있습니다. popup_on
은 실제 처리기이며 event
과 month
의 현재 값을 가져야합니다. 내가 어떻게이 일을해야하는지 어떤 생각? 감사.
죄송합니다 좀 더 깔끔한 일을 할 매개 변수를 만들 수 있습니다 너무 바보 같지만 실제로이 기능을 어디에 두어야합니까? '모양'은 루프에서 생성됩니다. 아마도 10 번에서 20 번 이상이 걸리며 '모양'('createElementNS'의 새 인스턴스)마다 처리기가 연결되어야합니다. 그래서 현재의 '모양'이 컨텍스트에있는이 익명의 함수를 어디에 넣을 수있는 것 같지 않습니다. 이것을 감안할 때, 모든 것을 'addEventListener'호출 자체에 넣지 않아도 되나요? 내가 생각하기에, 어떻게 매개 변수로 'e'와 'month'를 모두 얻을 수 있는지에 관한 문제는 ...? – EML
@ user785194 위에서 작성한 코드가 정상적으로 작동한다고 생각합니다. 모양이 다시 만들어 질 때마다 위의 코드를 그 특정 인스턴스에 이벤트 리스너를 추가하기 만하면됩니다. –
훌륭함 - 그랬습니다. 감사. – EML