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

<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>

最佳答案

看起来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

关于javascript - 谷歌用多个信息窗口映射多个标记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18007670/

10-10 14:18
查看更多