2010-04-19 164 views
0

我已經寫過這段代碼,它循環遍歷經緯度/長度座標數組,並在每個座標處放置一個標記。一切正常,豁免信息窗口將不會出現一旦點擊標記。谷歌地圖,標記信息窗口不會顯示?

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); 

    } 

任何想法?謝謝!

回答

3

單擊處理:

function() { window['marker'+i].openInfoWindowHtml('Hello!') ; } 

引用(全局)變量i將被設置爲lat.length當for循環退出。

我建議:

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)); 
    ... 
} 

這個綁定變量我到點擊處理程序(處理程序現在是關閉)。更多關於關閉,見Working with Closures - MDC

+0

天色工作,現在所有的標記具有信息窗口,但... 我已經使用這個功能 GEvent.addListener(標記[我],「點擊」,函數(){這一點。 openInfoWindow('tower'+ i);}); ,它會將所有標記標記爲'tower6',而不是它的當前數組。 – 2010-04-19 08:48:45

+0

作品!謝啦! – 2010-04-19 10:21:12