【问题标题】:Multiple infoWindow in Google Map APIGoogle Map API 中的多个 infoWindow
【发布时间】:2016-01-14 16:26:13
【问题描述】:

我正在尝试为多个标记创建多个信息窗口,但似乎只是参考最后一个信息窗口

这是我的代码(在 for 循环中,_lat 和 _long 是唯一值):

                        marker.addListener('click', function(){
                            //markerInfoWindow.close();
                            markerInfoWindow.setContent('<a href="#" onclick="onUnsavePlace(' + _lat + ',' + _long + ');">Unsave place</a>', true);
                            markerInfoWindow.open(map, this); 
                        }); 

                        marker.setMap(map); 

我用marker测试过,marker显示正确,但都链接到最后一个infoWindow。

如何为每个标记创建新的信息窗口?

更新:

这完全是我更新后的功能:

        function getListPosition(listMarkers, map){
            db.transaction(function(tx){
                tx.executeSql('SELECT * FROM Position', [], function(tx, rs) {
                    var numberOfItems = rs.rows.length; 

                    var markerInfoWindow = new google.maps.InfoWindow();
                    var marker;

                    for (var i = 0; i < numberOfItems; i++) {

                        var _lat = rs.rows.item(i).Lat;
                        var _long = rs.rows.item(i).Long;

                        marker = new google.maps.Marker({
                            position: {lat: _lat , lng: _long}
                        });

                        listMarkers.push(marker);

                        google.maps.event.addListener(marker, 'click', (function(marker) {
                            return function() {
                                markerInfoWindow.setContent('<a href="#" onclick="onUnsavePlace(' + _lat + ',' + _long + ');">Unsave place</a>', true);
                                markerInfoWindow.open(map, marker);
                            }
                        })(marker));

                        // marker.addListener('click', function(){
                        //     //markerInfoWindow.close();
                        //     markerInfoWindow.setContent('<a href="#" onclick="onUnsavePlace(' + _lat + ',' + _long + ');">Unsave place</a>', true);
                        //     markerInfoWindow.open(map, this); 
                        // }); 

                        marker.setMap(map); 

                        // Set map center to the last marker
                        if (i == numberOfItems - 1){
                            map.setCenter({lat: _lat, lng: _long});
                        } 

                    }

                });
            }, function(err){
                console.log('Error when get list position. Error code: ' + err.code);
            });
        }

【问题讨论】:

标签: google-maps-api-3 google-maps-markers


【解决方案1】:

您需要对单击侦听器函数运行时所需的循环变量进行函数闭包。在你的情况下_lat 和_lng。不过,从标记 (this) 中获取这些可能是最简单的:

google.maps.event.addListener(marker, 'click', function(evt) {
  markerInfoWindow.setContent('<a href="#" onclick="onUnsavePlace(' + this.getPosition().lat() + ',' + this.getPosition().lng() + ');">Unsave place</a>', true);
  markerInfoWindow.open(map, this);
});

(未测试)

【讨论】:

  • 哦,它有效。但为什么它不适用于此:marker.addListener('click', function(){ //markerInfoWindow.close(); markerInfoWindow.setContent('&lt;a href="#" onclick="onUnsavePlace(' + _lat + ',' + _long + ');"&gt;Unsave place&lt;/a&gt;', true); markerInfoWindow.open(map, this); });
  • 因为正如我在回答和评论中所说,_lat 和 _long 上没有函数闭包。
  • 我的错!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多