2

我正在绘制代表地图上商店的标记。

有一个全局信息窗口出现在每个被点击的标记上,在它为前一个点击的标记关闭之后。

在某些情况下,一些商店可能具有相同的地址,因此标记会出现在彼此的顶部,并且只能看到顶部标记。

为了解决这个问题,我在 infoWindow 中添加了分页。

问题是顶部标记是列表中的最后一个,因此 infoWindow 显示最新商店的信息,并且分页显示“返回”按钮,而不是首先显示第一家商店和“下一个”按钮。

我尝试像这样颠倒“for”循环的顺序,for (i=limit; i>0; i--)但它不起作用。地图卡住了,好像在运行一些 ajax 请求。

这是代码:

function drawShopsMarkers(){
    var marker;
    markersArray = [];
    var i;
    var limit = globalShopsArr.length;

    for (i=0; i<limit; i++){
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(globalShopsArr[i].shopLat, globalShopsArr[i].shopLng), 
            map: map,
            title: globalShopsArr[i].shopTitle
        });

        markersArray.push(marker);
        marker.setMap(map);

        google.maps.event.addListener(markersArray[i], 'click', makeListener(i));
    }

    function makeListener(index) {
        return function() {
            globalInfowindow.disableAutoPan=true;
            globalInfowindow.open(map,markersArray[index]);

            CreateInfoWindowString(index);

            globalInfowindow.setOptions({
                content: globalContentString
            });
        }
    }       
}

CreateInfoWindowString()函数只是填充globalContentString包括分页。

你能说是什么导致了问题吗?

4

1 回答 1

1

尝试

for (i=limit-1;i>=0;i--)

就像评论中建议的那样。当您将功能附加到标记时,您也需要更改线。当您将标记推送到数组时,它会累积,但您将函数附加到不存在的元素。使用另一个变量并在循环中增加它:

C++

这条线

google.maps.event.addListener(markersArray[i],.. ... ...
当您将循环更改为递减 i 并尝试 MarkersArray[i] 时,它必须给出错误,因为元素 i 尚未在数组中。所以创建 ac 变量并像我写的那样使用它,并将行更改为使用 c 而不是 i。

于 2012-11-05T17:21:56.420 回答