0

我有这段代码可以生成我希望可以通过弹出信息窗口点击的市场。

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

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

我已经在这里查看了关于“展开”标记功能的部分,看起来这可能是我出错的地方,但我无法通过测试他们建议的更改来让它工作。

4

4 回答 4

1

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

于 2008-12-18T13:56:30.263 回答
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;
}
于 2008-12-13T18:45:53.567 回答
0

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

我认为这是问题所在,这是因为事件侦听器的工作方式。当单击功能发生时,它会评估侦听器事件。所以你显示的 HTML 总是相同的,因为变量总是被重写。

于 2008-12-13T03:23:05.320 回答
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
);

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

于 2009-11-29T18:16:45.193 回答