Javascript 单击同一标记两次将打开两个信息窗口

Javascript 单击同一标记两次将打开两个信息窗口,javascript,google-maps,google-maps-api-3,google-maps-markers,Javascript,Google Maps,Google Maps Api 3,Google Maps Markers,我让infowindows正常工作,但由于某种原因,如果我多次单击同一标记,它会打开多个相同的infowindow。我有一种感觉,它必须与我的代码,但我不能完全把我的手指是什么。感谢您的帮助 var map; var markers = []; function initMap() { map = new google.maps.Map(document.getElementById('map_canvas'), { zoom: 14, center:

我让infowindows正常工作,但由于某种原因,如果我多次单击同一标记,它会打开多个相同的infowindow。我有一种感觉,它必须与我的代码,但我不能完全把我的手指是什么。感谢您的帮助

var map;
var markers = [];

function initMap() {
    map = new google.maps.Map(document.getElementById('map_canvas'), {
        zoom: 14,
        center: new google.maps.LatLng(33.6894120, -117.9872660),
        mapTypeId: 'roadmap',
        disableDefaultUI: true
    });



    function addMarker(feature) {
        var marker = new google.maps.Marker({
            position: feature.position,
            icon: icons[feature.type].icon,
            map: map,
            type: feature.type,
            title: feature.title,
            description: feature.description
        });
        marker.addListener('click', function() {
            map.setCenter(marker.getPosition());

            var infoWindow = new google.maps.InfoWindow({
                map: map, 
                pixelOffset: new google.maps.Size(0, -60)
            });
            infoWindow.setContent(marker.description);
            infoWindow.setPosition(marker.position);

            google.maps.event.addListener(map, 'drag', function() {
                infoWindow.close();
            });
            google.maps.event.addListener(map, 'click', function() {
                infoWindow.close();
            });
        });
        markers.push(marker);
    }

    filterMarkers = function(getType) {
        //console.log(getType);
        for (var i = 0; i < markers.length; i++) {
            if (markers[i].type == getType || getType == "") {
                markers[i].setVisible(true);
            } else {
                markers[i].setVisible(false);
            }
        }
    }

    var features = [

        {
          position: new google.maps.LatLng(-33.91721, 151.22630),
          type: 'type1',
          description: 'Description1'
        },{
          position: new google.maps.LatLng(-33.91721, 151.22630),
          type: 'type2',
          description: 'Description2'
        },{
          position: new google.maps.LatLng(-33.91721, 151.22630),
          type: 'type3',
          description: 'Description3'
        }


    ];

    for (var i = 0, feature; feature = features[i]; i++) {
        addMarker(feature);
    }
}

$(document).ready(function(){
    initMap();
});
var映射;
var标记=[];
函数initMap(){
map=new google.maps.map(document.getElementById('map_canvas'){
缩放:14,
中心:新google.maps.LatLng(33.6894120,-117.9872660),
mapTypeId:“路线图”,
disableDefaultUI:true
});
功能添加标记(功能){
var marker=new google.maps.marker({
位置:feature.position,
图标:图标[feature.type]。图标,
地图:地图,
type:feature.type,
标题:feature.title,
description:feature.description
});
marker.addListener('click',function()){
map.setCenter(marker.getPosition());
var infoWindow=new google.maps.infoWindow({
地图:地图,
pixelOffset:new google.maps.Size(0,-60)
});
infoWindow.setContent(marker.description);
信息窗口设置位置(标记位置);
google.maps.event.addListener(映射'drag',函数(){
infoWindow.close();
});
google.maps.event.addListener(映射,'click',函数(){
infoWindow.close();
});
});
标记器。推(标记器);
}
filterMarkers=函数(getType){
//log(getType);
对于(var i=0;i
每次单击标记,您都将创建一个新的
信息窗口

marker.addListener('click')。。。
var infoWindow=*新建google.maps.infoWindow(…*

预计您将获得多个实例

如果您想要一个
InfoWindow
用于所有标记,则可以按照


如果您希望每个标记签出一个。

您正在使用每个标记单击创建一个新的
信息窗口

marker.addListener('click')。。。
var infoWindow=*新建google.maps.infoWindow(…*

预计您将获得多个实例

如果您想要一个
InfoWindow
用于所有标记,则可以按照


如果希望每个标记签出一个。

如果不希望每次单击标记时都创建一个信息窗口,请不要每次单击标记时都创建一个新的信息窗口,为标记创建一个(或为地图创建一个,如果只希望打开一个),然后在单击侦听器中打开它

function addMarker(feature) {
  var marker = new google.maps.Marker({
    position: feature.position,
    map: map,
    type: feature.type,
    description: feature.description
  });
  // create infowindow for the marker 
  var infoWindow = new google.maps.InfoWindow({});
  marker.addListener('click', function() {
    map.setCenter(marker.getPosition());
    // set the content of the infowindow
    infoWindow.setContent(marker.description);
    // open the infowindow on the marker.
    infoWindow.open(map,marker);
  });
  markers.push(marker);
}

如果您不希望每次单击标记时都创建一个信息窗口,请不要每次单击标记时都创建一个新的信息窗口,为标记创建一个信息窗口(或者为地图创建一个信息窗口,如果您只希望打开一个信息窗口),然后在单击侦听器中打开它

function addMarker(feature) {
  var marker = new google.maps.Marker({
    position: feature.position,
    map: map,
    type: feature.type,
    description: feature.description
  });
  // create infowindow for the marker 
  var infoWindow = new google.maps.InfoWindow({});
  marker.addListener('click', function() {
    map.setCenter(marker.getPosition());
    // set the content of the infowindow
    infoWindow.setContent(marker.description);
    // open the infowindow on the marker.
    infoWindow.open(map,marker);
  });
  markers.push(marker);
}

你能提供更多的代码吗?你在哪里创建markers变量?我添加了for循环,你还需要什么吗?我想说的是你正在推到markers数组,但我看不到你在哪里定义了它,这可能是你出现此错误的原因。Mert,我已经添加了我的完整代码。你看到什么可能是错误的吗坏代码?你能在initMap函数中定义map和markers变量并重试吗?你能给出更多的代码吗?你在哪里创建markers变量?我添加了for循环,你还需要什么吗?我的意思是你正在推markers数组,但我看不到你在哪里定义它,这可能是你为什么要使用h的原因避免此错误。Mert,我已添加了完整的代码。您是否看到任何可能是错误代码的内容?能否在initMap函数中定义map和markers变量并重试?这两个示例似乎都使用单个内容字符串。我希望能够在标记数组中定义我的内容字符串。这两个示例都是r将使用单个内容字符串。我希望能够在标记数组中定义我的内容字符串。