0

我正在尝试在我的页面上放置一个带有多个标记(> 1000)的谷歌地图,每个标记都有自己独特的信息窗口。我通过数组添加标记,标记似乎很好,但所有信息窗口都具有相同的确切内容。我很茫然,非常感谢你的信息。这是我的代码:

<script>
var map;
var markersArray = [];
var infowindow =  new google.maps.InfoWindow({
    content: ''
});

function initialize() {

    bounds = new google.maps.LatLngBounds();

    usa = new google.maps.LatLng(37.09024, -95.712891);

    var myOptions = {
        zoom: 4, 
        center: usa,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        navigationControlOptions: {
            style: google.maps.NavigationControlStyle.SMALL
        }
    };

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    plotMarkers();
}

// here is where the array content is contained
var webApps = [<%=strArray%>];

function plotMarkers(){
    var i;
    for(i = 0; i < webApps.length; i++){
        codeAddresses(webApps[i]);
    }
}

function codeAddresses(address){

    // other variables
    lat = address[3];
    lng = address[4];
    desc = address[0]

    myLatlng = new google.maps.LatLng(lat,lng);

    var marker = new google.maps.Marker({
        position: myLatlng,
        map: map,
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(desc);
        infowindow.open(map, this);
    });

}

google.maps.event.addDomListener(window, 'load', initialize);
</script>
<div id="map_canvas" style="width: 100%; height: 600px;"></div>
4

2 回答 2

2

它看起来像desc一个全局变量。因此,在循环的每次迭代中,您将其设置为其他内容,这意味着它将始终等于您迭代的最后一个项目的描述。

试着把它放在var前面,使它成为一个局部变量。例如:var desc = address[0];

当你这样做时,一个称为“闭包”的概念将确保你创建的每个侦听器都将引用desc它创建时的值,而不是它最后设置的值。

出于几个原因,最好避免使用全局变量,这就是其中之一。您应该养成在变量前加上 . 前缀的习惯var

关于变量范围的信息:

http://msdn.microsoft.com/en-us/library/ie/bzt2dkta(v=vs.94).aspx

关闭信息:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

于 2013-08-02T02:38:07.900 回答
0

我遇到了同样的问题,最终发现文档中有一篇文章解决了这个问题:

https://developers.google.com/maps/documentation/javascript/examples/event-closure

除了Kai提到的全局变量和局部变量之外,还需要弄清楚函数闭包。简而言之,分配信息窗口的代码片段和它的描述以及添加事件侦听器的位置将需要是一个单独的函数。

有关更多详细信息,请参阅上面的文章。

于 2013-11-13T02:47:09.103 回答