我编写了这段代码,循环遍历纬度/经度坐标数组,并在每个坐标处放置一个标记。所有东西都很好,一旦点击标记就不会出现豁免信息窗口。
var ExpTowerIcon = new GIcon();
ExpTowerIcon.image = "tower.png";
ExpTowerIcon.iconSize = new GSize(75, 75);
ExpTowerIcon.iconAnchor = new GPoint(37, 65);
ExpTowerIcon.infoWindowAnchor = new GPoint(37, 20);
var marker=new Array();
for ( i=0 ; i < lat.length ; i++ ) {
var MarkerPoint = new GLatLng(lat[i],long[i]);
marker[i] = new GMarker(MarkerPoint,{icon:ExpTowerIcon})
map.addOverlay( marker[i] );
GEvent.addListener( marker[i] , 'click', function() { marker[i].openInfoWindowHtml('Hello!') ; });
var polyline = new GPolyline([ new GLatLng(lat[i],long[i]) , new GLatLng(lat[i+1],long[i+1]) ], "#ff0000", 5);
map.addOverlay(polyline);
}
有什么想法吗?谢谢!
答案 0 :(得分:3)
点击处理程序:
function() { window['marker'+i].openInfoWindowHtml('Hello!') ; }
引用(全局)变量i,当for循环退出时,它将被设置为lat.length。
我建议:
function() { this.openInfoWindowHtml('Hello!') ; }
修改强>
如果您需要在click事件处理程序中包含标记号,我建议:
function getHandler(i) {
return function () { this.openInfoWindow('tower' + i) ; };
}
for (i = 0; i < lat.length; i++) {
...
GEvent.addListener( marker[i] , 'click', getHandler(i));
...
}
这将变量i绑定到click处理程序(处理程序现在是闭包)。有关闭包的更多信息,请参阅Working with Closures - MDC