1

我知道这个话题已经讨论过很多次了,但我无法解决我的问题。我想在我的地图上显示一些标记,每个标记都有一个点击事件。每个点击事件都应该打开一个包含一些数据的信息窗口。

这是我写的;此代码在控制台中运行没有任何错误,所有标记都正确显示,但单击时显示的信息窗口对所有人来说总是相同的......

//Global variable
var info = new google.maps.InfoWindow();

//... some other functions

function createMarker(map)
{
    for(i = 0 ; i < loadedMarkers.length ; i++) { 
        (function(i) {
            value = loadedMarkers[i];
            var pos = new google.maps.LatLng(value.Latitude, value.Longitude);

            var mapOptions = {
                zoom: 10,
                center: pos,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            }

            var marker = new google.maps.Marker({
                position: pos,
                map: map,
                title: value.Title
            });

            var MarkerContent = "<div class=\"marker\">" +
                                    "<h2>"+ value.Title +"</h2>" +
                                    "<p>"+ value.Text +"</p>" +
                                "</div>";

            info.setOptions({
                content: MarkerContent,
                size: new google.maps.Size(50, 50),
                position: pos
            });

            google.maps.event.addListener(marker, 'click', function () {
                info.open(map, marker);
            }); 
         }
       )(i);
    }
}

我听说了一些闭包问题(我是 JS 新手),所以我尝试将逻辑放在 (function(i) ...) 中,但它总是为所有信息窗口显示相同的内容。

有人可以解释我哪里错了(为什么?)

非常感谢你

4

1 回答 1

3

您需要在打开信息窗口时更新信息窗口中的内容(否则它会显示最后的内容):

    google.maps.event.addListener(marker, 'click', function () {
        info.setOptions({
            content: MarkerContent
        });
        info.open(map, marker);
    }); 
于 2013-07-21T16:47:50.483 回答