javascript - 所有信息窗口都有相同的数据

标签 javascript google-maps google-maps-api-3

我对 Google Maps V3 API 相当陌生,我遇到了一个问题,即所有信息窗口都具有相同的数据,我使用的代码迭代一系列标记详细信息并输出标记以及每个标记的信息窗口。这是我的代码:

    <script type="text/javascript">

(function () {
google.maps.Map.prototype.markers = new Array();
google.maps.Map.prototype.addMarker = function(marker) {
this.markers[this.markers.length] = marker;
};})();

function initialize() {

var latlng = new google.maps.LatLng(37.0691, -8.0312);

    var myOptions = {
    zoom: 12,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    };

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

    var house = 'images/house.png';

    var a = new Array();

    var t =  new Object();
    t.name = "Casa De Cova"
    t.lat =  37.0691
    t.lng =  -8.0312
    t.ico = house
    t.info = 'Casa De Cova Villa'
    a[0] = t;

    var t =  new Object();
    t.name = "Casa Jaquinta"
    t.lat =  37.0450
    t.lng =  -8.0442
    t.ico = house
    t.info = 'Jaquinta Villa'
    a[1] = t;

    var t =  new Object();
    t.name = "Faro Aiport"
    t.lat =  37.016187
    t.lng =  -7.970581
    t.ico = 'images/plane.png'
    t.info = 'The main Airport'
    a[2] = t;


    for (var i = 0; i < a.length; i++) 
    {
        var latlng = new google.maps.LatLng(a[i].lat, a[i].lng);
        map.addMarker(createMarker(a[i].name,latlng,a[i].ico,a[i].info));
    }
}

var counter = 1;

function createMarker(name, latlng, icon, info) 
{
    var marker = new google.maps.Marker({position: latlng, map: map, icon: icon, title: name});

    infowindow = new google.maps.InfoWindow({            
        content: info
    });

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

    document.getElementById(counter).onclick = function() {
        infowindow.open(map, marker);
    }

    counter++;
    return marker;
}
</script>

如果在“infowindow.open(map,marker);”之前进行“var”声明,该问题就可以解决如果这样做了,那么我可以看到每个窗口及其各自的数据,但是当打开一个信息窗口时,前一个窗口将不会关闭。

网站在这里:http://www.danhall.co.uk/algarve/map.php

我有点迷失,非常感谢任何帮助。

最佳答案

一定要使用信息窗口的 var 声明;否则 infowindow 是全局的,每次调用 createMarker() 时都会覆盖它。

之后,您只需在每次显示一个信息窗口时关闭所有打开的信息窗口即可。这是我之前解决这个问题的方法:

...
var counter = 1,
    infowindows = [];

function closeInfoWindows()
{
    var i = infowindows.length;
    while(i--)
    {
        infowindows[i].close();
    }
}

function createMarker(name, latlng, icon, info) 
{
    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        icon: icon,
        title: name
    });

    var infowindow = new google.maps.InfoWindow({            
        content: info
    });

    infowindows.push(infowindow);

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

    document.getElementById(counter).onclick = function ()
    {
        infowindow.open(map, marker);
    }

    counter++;
    return marker;
}

关于javascript - 所有信息窗口都有相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3711700/

相关文章:

javascript - Google map API - 自动完成英国县

java - OSRM 函数与 GoogleMaps 函数

google-maps - 融合表过滤条件或

javascript - 在提交表单之前单击按钮时显示 div 元素

ios - 谷歌地理编码不断返回不同地方的市中心位置

javascript - 无法从 d3 json 文件中读取路径 d 值?

ios - 在 iOS swift 的谷歌地图中为多边形添加文本标签

javascript - 在 Google 的 map API 上重新加载标记

javascript - JavaScript的 "if"语句的值可以使用吗?

javascript - NodeJS中通过URL发送的参数数量