У вас очень распространенная проблема закрытия в методе addListener
.
Переменные, заключенные в замыкание, совместно используют одну и ту же среду, поэтому к моменту вызова обратного вызова click
из метода addListener
цикл будет работать и переменные s
, bsc
, c
, f
, h
, lat
и lon
будут оставлены, указывая на значения последнего элемента в array
.
Вы можете решить эту проблему с помощью еще большего числа замыканий, используя фабрику функций:
function makeInfoWindowEvent(map, overlay, s, bsc, c, lat, lon, f, h) {
return function() {
map.openInfoWindowHtml(overlay,
"Site"+ s +"<br>"+"BSC"+ bsc +"<br>"+
"Cell"+ c +"<br>"+"Cell lattitude"+ lat +"<br>"+
"Cell longitude" + lon + "<br>"+"Freq"+ f +"<br>"+
"Height"+ h );
};
}
// ...
for(m = 0; m < array.length; m++) {
// ...
GEvent.addListener(polygon, "click",
makeInfoWindowEvent(map, polygon, s, bsc, c, lat, lon, f, h)
);
}
Это может быть довольно сложной темой, если вы не знакомы с тем, как работают замыкания. Вы можете ознакомиться со следующей статьей Mozilla для краткого введения: