2013-04-03 2 views
0

Я пытаюсь создать группу маркеров с прикрепленным информационным окном. Однако, независимо от того, какой маркер я нажимаю, он всегда открывает информационное окно последнего подробного маркера. Кто-нибудь знает, почему? Пожалуйста помоги.Неверное окно с информацией о карте Google

var stepDisplay = new google.maps.InfoWindow(); 
function AddDetailMarker(map, itinerary) { 
    var markers = []; 
    for (var i = 1; i < itinerary.Legs.length; i++) { 
     var position = new google.maps.LatLng(itinerary.Legs[i].BusStop.Latitude, itinerary.Legs[i].BusStop.Longitude); 
     var title = itinerary.Legs[i].BusStop.Code + ": " + itinerary.Legs[i].BusStop.Location + " " + itinerary.Legs[i].BusStop.Street + ", Quận " + itinerary.Legs[i].BusStop.Ward; 
     var detailmarker = new google.maps.Marker({ 
      position: position, 
      map: map, 
      title: title, 
      icon: "/Content/img/customized_marker/" + "blue" + "/" + "bus-stop2" + ".png" 
     }); 
     google.maps.event.addListener(detailmarker, 'click', function() { 
      stepDisplay.setContent(title); 
      stepDisplay.open(map, detailmarker); 
     }); 
     markers[i-1] = detailmarker; 
    } 
} 

Редактировать: можно dublicate of Google maps infowindow showing on wrong marker. Я пробовал все решения, которые я нашел здесь, и никто не работает.

ответ

0

Да, это точно такая же проблема, как и у другой, с которой вы связались, и решение для вашего кода одинаково - поместите код для создания каждого маркера в функцию и вызовите эту функцию в вашем цикле:

var stepDisplay = new google.maps.InfoWindow(); 
function AddDetailMarker(map, itinerary) { 
    for (var i = 1; i < itinerary.Legs.length; i++) { 
     addLegMarker(map, itinerary.Legs[i]); 
    } 
} 

function addLegMarker(map, leg) { 
    var position = new google.maps.LatLng(leg.BusStop.Latitude, leg.BusStop.Longitude); 
    var title = leg.BusStop.Code + ": " + leg.BusStop.Location + " " + leg.BusStop.Street + ", Quận " + leg.BusStop.Ward; 
    var detailmarker = new google.maps.Marker({ 
     position: position, 
     map: map, 
     title: title, 
     icon: "/Content/img/customized_marker/" + "blue" + "/" + "bus-stop2" + ".png" 
    }); 
    google.maps.event.addListener(detailmarker, 'click', function() { 
     stepDisplay.setContent(title); 
     stepDisplay.open(map, detailmarker); 
    }); 
} 

Вы видите, почему это исправление? title и detailmarker теперь специфичны для каждого вызова addLegMarker(). В исходном коде была только одна копия каждой из этих переменных, разделяемая всеми маркерами.

Смежные вопросы