【问题标题】:Google Maps, marker info window won't show up?谷歌地图,标记信息窗口不会显示?
【发布时间】:2010-04-19 08:12:16
【问题描述】:

我编写了这段代码,它遍历一个纬度/经度坐标数组,并在每个坐标处放置一个标记。一切都很好,一旦单击标记,信息窗口将不会出现。

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

    }

有什么想法吗?谢谢!

【问题讨论】:

    标签: javascript google-maps


    【解决方案1】:

    点击处理程序:

    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 绑定到点击处理程序(处理程序现在是一个 闭包)。有关闭包的更多信息,请参阅Working with Closures - MDC

    【讨论】:

    • 部分有效,现在所有标记都有信息窗口,但是......我已经使用了这个函数 GEvent.addListener( marker[i] , 'click', function() { this.openInfoWindow( 'tower '+i) ; });它会将所有标记标记为“tower6”,而不是它在数组中的当前编号。
    猜你喜欢
    • 2013-09-13
    • 2014-10-15
    • 2011-08-21
    • 1970-01-01
    • 2016-12-21
    • 2018-03-01
    • 2012-02-18
    • 2011-08-09
    • 2016-05-31
    相关资源
    最近更新 更多