Google地图信息框运行不正确

时间:2013-04-03 21:58:37

标签: javascript google-maps google-maps-markers

我正在尝试创建一组带有信息框的标记。但是,无论我点击哪个标记,它都会打开最后一个详细标记的信息框。谁知道为什么?请帮忙。

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

编辑:可能是Google maps infowindow showing on wrong marker的公告。我已经尝试了我在这里找到的所有解决方案,但都没有。

1 个答案:

答案 0 :(得分: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);
    });
}

你知道为什么修复它吗? titledetailmarker现在特定于addLegMarker()的每次调用。在原始代码中,每个变量只有一个副本,在所有标记之间共享。