일부 동작을 요소에 추가하기 위해 onload를 실행하는 설치 기능이 있습니다. setup 함수는 mouseover 이벤트에 인수를 전달하지만 해당 인수는 로컬 참조이므로 for 루프 중에 변경됩니다.익명 함수를 통해 마우스 오버를 할당 할 때 로컬 변수를 전달하는 방법은 무엇입니까?
function setupAreas(image, map, lots) {
// obj is a simple wrapper for doc.getElementById
var image = obj(image); // image for imagemap
var map = obj(map); // imagemap element
var areas = map.getElementsByTagName('area');
for (var i in areas) {
var area = areas[i]; // imagemap area element
area.id = area.alt;
}
for (var lot_id in lots) {
if (lot_id != 'Lot No' && lot_id != '') {
var area = document.getElementById(lot_id);
if (!area || !area.coords) {
alert('no map coords for lot '+lot_id);
} else {
var coords = area.coords.split(",");
//alert('tag: '+area.tagName+' id: '+lot_id+' area: '+area);
var details = lots[lot_id];
if (details) {
// setup mouseover call with complete details of area
area.onmouseover = function(){ showLot(lot_id, area, coords, details, image, map, areas, lots) };
... snip ...
인해 문제가 참조 루프의 lot_id
area
및 각 반복에서 변경된다는 점이다. 그 결과 모든 요소에 대한 mouseover 이벤트는 lot_id
이고 마지막 영역 인 의 영역은입니다.
저는이를 위해 jQuery가 필요하거나 필요하지 않습니다. 글로벌 네임 스페이스를 오염시키지 않는 간단한 JS 솔루션이 선호됩니다. 폐쇄에 루프에 대한 귀하의 내용을 둘러싼
놀랍습니다. JS를 수년간 사용해 왔으며 폐쇄에 대해 전혀 몰랐습니다. – SpliFF