Google Maps API - 无法正确加载信息窗口数据

时间:2008-12-13 03:02:44

标签: javascript google-maps openinfowindowhtml

我有这个代码,通过弹出信息窗口生成我想要点击的市场。

for (i = 0; i < marker_array.length; i++) {
    var point = new GLatLng(marker_array[i][0], marker_array[i][1]);
    var marker = new GMarker(point, markerOptions);

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html_data);
        });
    map.addOverlay(marker);
    }

问题是只有一个市场可以点击。无论点击哪一个,都会在一个可点击标记上弹出一个带有一个可点击标记数据的信息窗口。所有标记都加载并位于正确的位置,因此问题仅在于为每个标记显示弹出窗口数据。

我已经查看了关于“展开”标记函数here的部分,看起来这可能是我出错的地方,但我无法通过测试更改来实现这一点他们建议。

4 个答案:

答案 0 :(得分:1)

我相信你的问题是变量html_data对于这个循环的所有迭代是相同的。您应该在循环中更新该变量,以使值不同。

答案 1 :(得分:0)

我发现了同样的情况,我有一个解决这个问题的方法。我建议你创建一个扩展Marker类的自定义类。在这个自定义类中,您应该创建一个具有数据参数的构造函数,并且此类还应该有自己的信息窗口变量,该变量将从主应用程序中调用。例如:

自定义类:

public class StoreSpot extends Marker
{  
    public var infoWindow:InfoWindowOptions;
    public var store_id:String;
    public var address:String;
    public var name:String;
    ...
}

主要应用:

tempMarker = new StoreSpot(
    tempLatlng,
    new MarkerOptions({
        icon:new spotStore(), 
        iconAlignment:MarkerOptions.ALIGN_HORIZONTAL_CENTER,
        iconOffset:new Point(0,-50)
    }),
    temp.store_id,
    temp.name,
    temp.address,
    temp.detail
);

这样您可以为不同的标记放置不同的信息窗口。希望这对你有用。在这里输入代码。

答案 2 :(得分:0)

我不太确定我是否关注,但你是说所有弹出窗口都有相同的数据吗?

我认为这是问题所在,那是因为事件监听器的工作方式。当click函数发生时,它会评估监听器事件。因此,您显示的HTML始终是相同的,因为变量总是被重写为。

答案 3 :(得分:0)

我使用的数组与我的HTML标记数据相匹配,效果很好:

function createMarker(posn, title, icon, i) {
    var marker = new GMarker(posn, {title: title, icon: icon, draggable:false});
    GEvent.addListener(marker, 'mouseover', function() { 
        map.closeInfoWindow()
        marker.openInfoWindowHtml(infoText[i])

     } );   
    return marker;
}