javascript - Google Maps API - 无法在多个标记上设置多个 infoWindows

标签 javascript api google-maps

我有以下代码:

<!DOCTYPE html>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        html { height: 100% }
        body { height: 100%; margin: 0px; padding: 0px }
        #map_canvas { height: 100% }
    </style>
    <script type="text/javascript"
            src="http://maps.google.com/maps/api/js?sensor=false">
    </script>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script type="text/javascript">
        function initialize() {
            var cities = {{json|safe}};

            /*
            for (i in cities) { // 0, 1
                // document.write(cities[i]['fields']['name'] +'<br />');
                document.write(cities[i]['fields']['x'] +'<br />');
                document.write(cities[i]['fields']['y'] +'<br />');
                document.write('<br />');
            } /* */

            var center = new google.maps.LatLng(-22.784791,-45.088806);
            var myOptions = {
                zoom: 8,
                center: center,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
            var citiesLoc = new Array();
            // var flightPlanCoords = new Array();
            var infoBoxes = new Array();
            var markers = new Array();

            for (var i in cities) {
                // document.write(cities[i]['fields']['name'] );
                citiesLoc[i] = new google.maps.LatLng(cities[i]['fields']['x'],cities[i]['fields']['y']);

                // flightPlanCoords.push(new google.maps.LatLng(cities[i]['fields']['x'],cities[i]['fields']['y']));

                infoBoxes[i] = new google.maps.InfoWindow({
                    content: "<div>" + cities[i]['fields']['name'] + "</div>"
                });

                markers[i] = new google.maps.Marker({
                    position: citiesLoc[i],
                    map: map,
                    title: cities[i]['fields']['name']
                });


                google.maps.event.addListener(markers[i], 'click', function() {
                    infoBoxes[i].open(map, markers[i]);
                });


            };




            // document.write(infoBoxes[1]['content']);
            /*
            var flightPath = new google.maps.Polyline({
                path: flightPlanCoords,
                strokeColor: "#0000ff",
                strokeOpacity: 1.0,
                strokeWeight: 5
            });
            flightPath.setMap(map);
             */
        }

    </script>
</head>
<body onload="initialize()">
    <div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>

它设置了两个标记,并附加了两个信息窗口,但是当我单击任一标记时,仅显示其中一个标记(2 号中的第 1 号,零索引)。如果我这样写:

 google.maps.event.addListener(markers[0], 'click', function() {
                infoBoxes[0].open(map, markers[0]);
            });
            google.maps.event.addListener(markers[1], 'click', function() {
                infoBoxes[1].open(map, markers[1]);
            });

然后就可以正常工作了。我错过了什么?

最佳答案

infoBoxes[i].open(map,markers[i]); 在函数内部求值时,它将采用 i 的更新值,即后面的值循环结束,即 1

只需在其中执行 alert(i) 即可看到这种情况发生。

这是一个粗略的修复(经过测试且有效):

markers[i]._index = i;
google.maps.event.addListener(markers[i], 'click', function() {
    infoBoxes[this._index].open(map, markers[this._index]);
});

您可能应该在这里阅读更多内容 http://code.google.com/apis/maps/documentation/javascript/events.html 。我知道要读的东西很多,但有时是必要的。

关于javascript - Google Maps API - 无法在多个标记上设置多个 infoWindows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3999074/

相关文章:

javascript - Rails + Bootstrap 选项卡

javascript - 需要在jquery中访问autocomplete comboBox的ID

api - 我们可以在 DBT(数据构建工具)中调用任何外部 REST API 吗?

api - 使用 magento API V2 限制结果数量

javascript - 具有多个停靠点/航点的 Google Maps Route API

javascript - Google Maps JS API v3 - 带有自定义标记的简单多标记示例

javascript - API 响应在 Node 中为 NULL 但在 Python 中运行良好

javascript - 如何使滚动区域末尾的文本渐变阴影?

java - flex-compiler-oem.jar 无法解析 <s :Application> to a component implementation

css - 当您显示谷歌地图时,Chrome 会隐藏 iframe 滚动条