javascript - 谷歌地图信息窗口关闭不起作用

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

我有一个谷歌地图包含在this fiddle

当您单击图钉时,它们会按预期弹出一些信息,当您单击 x 时,它们会关闭信息窗口。

但是,当我单击第一个引脚,然后单击其他引脚(不单击 x)时,信息窗口会不断弹出,而不会删除其他引脚。我如何重构我的代码才能使其正常工作?

HTML

    <div id="map_canvas"></div>

风格

    #map_canvas {
        float: left;
        height: 565px;
        width: 100%;
    }
    #content {
        min-width: 320px;
    }

JS

    var mylatlongs = [
                        {"rank":1,"name":"name 1","lat":"-25.901820984476252","lng":"135"},
                        {"rank":2,"name":"name 2","lat":"-25.901820984476252","lng":"135.05"},
                        {"rank":3,"name":"name 3","lat":"-25.901820984476252","lng":"135.025"}
                    ];
    var infowindow = null;
    jQuery(function() {
            var StartLatLng = new google.maps.LatLng(mylatlongs[0]['lat'], mylatlongs[0]['lng']);
            var mapOptions = {
                center: StartLatLng,
                streetViewControl: false,
                panControl: false,
                maxZoom:17,
                zoom : 13,
                zoomControl:true,
                zoomControlOptions: {
                    style:google.maps.ZoomControlStyle.SMALL
                }
            };

        var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

        jQuery.each( mylatlongs, function(i, m) {
            var StartLatLng = new google.maps.LatLng(-25.901820984476252, 134.00135040279997);

            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(m.lat, m.lng),
                bounds: true,
                id : 'mk_' + m.rank,
                letter : m.index,
                map: map,
                title: m.name
            });

            google.maps.event.addListener(marker, 'click', function() {
                if (infowindow) {
                    infowindow.close();
                }
                infowindow.open(map,marker);
                position: new google.maps.LatLng(m.lat, m.lng);
            });

            var contentString = '<div id="content">'+
              '<div id="siteNotice">'+
              '</div>'+
              '<h1 id="firstHeading" class="firstHeading">'+ m.name + '</h1>'+
              '<div id="bodyContent">'+ (m.rank) +
              '</div>'+
              '</div>';

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

        });
    });

最佳答案

每个标记都有一个信息窗口,每个标记都有一个局部变量。当您尝试关闭先前打开的信息窗口时,您实际上正在关闭属于单击的标记的窗口。

在循环外部创建一个信息窗口,并在单击事件中设置其内容,以便它针对显示它的标记进行更新:

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

        jQuery.each( mylatlongs, function(i, m) {
            var StartLatLng = new google.maps.LatLng(-25.901820984476252, 134.00135040279997);

            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(m.lat, m.lng),
                bounds: true,
                id : 'mk_' + m.rank,
                letter : m.index,
                map: map,
                title: m.name
            });

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

            var contentString = '<div id="content">'+
              '<div id="siteNotice">'+
              '</div>'+
              '<h1 id="firstHeading" class="firstHeading">'+ m.name + '</h1>'+
              '<div id="bodyContent">'+ (m.rank) +
              '</div>'+
              '</div>';

        });

演示:http://jsfiddle.net/Guffa/GSX6G/3/

关于javascript - 谷歌地图信息窗口关闭不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22183864/

相关文章:

javascript - 在 Angularjs 中检测鼠标按下事件

jquery - Primefaces 是否能够从另一个域获取 jquery?

java - 使用 Google Maps Android API 2.0 的 Android 应用程序, map 不会移动

Javascript 和 Jquery : Adding markers for Google Maps when clicking a button

android - 每 1 分钟从服务器获取的 Gps LatLong 在 map 中显示为标记。但是标记正在复制

javascript - 用于多个 div 的 jQuery slideToggle

javascript单双引号问题

javascript - 使用 SVG 矩形作为整个页面的剪切灯箱?

jquery - 如何为 jQuery on() 方法编写 Jasmine 测试用例

javascript - 如果选中复选框,请按 Enter 键提交表单