0

У меня есть рабочие окна, но по какой-то причине, если я нажимаю один и тот же маркер несколькими щелчками, он открывает несколько одинаковых инфо-окон. У меня есть ощущение, что это должно быть что-то с моим кодом, но я не могу сказать, что это такое. Любая помощь приветствуется.Дважды нажмите один маркер Два InfoWindows

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(); 
}); 
+0

Можете ли вы дать больше вашего кода? Где вы создаете переменную маркеров? –

+0

Я добавил цикл for, вам нужно что-нибудь еще? – oompahlumpa

+0

То, что я говорю, это то, что вы нажимаете на массив маркеров, но я не вижу, где вы его определили, что, вероятно, является причиной того, что у вас эта ошибка. –

ответ

0

Вы создаете новый InfoWindow с каждым маркером мыши:

marker.addListener('click' ... var infoWindow = *new google.maps.InfoWindow(...*

Ожидается, что вы получите несколько экземпляров.

Если вы хотите один InfoWindow для всех маркеров вы можете следить за this example

Если вы хотите иметь по одному на каждые маркера проверить this SO answer.

+0

Оба этих примера, похоже, используют одну строку содержимого. Я хочу, чтобы определить мои строки содержимого в моем массиве маркеров. – oompahlumpa

2

Если вы не хотите, чтобы каждый раз, когда вы нажимаете на маркер, каждый раз, когда вы нажимаете на маркер, не создаете новое окно, не создавайте его каждый раз, когда вы нажимаете на маркер, создайте его для маркера (или одного для карты, если вы только когда-либо нужно открыть один) и открыть его в прослушивателе кликов.

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); 
} 

proof of concept fiddle