0

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

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

编辑:谷歌地图信息窗口可能重复显示在错误的标记上。我已经尝试了在这里找到的所有解决方案,但没有一个有效。

4

1 回答 1

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(). 在原始代码中,这些变量中的每一个只有一个副本,在所有标记之间共享。

于 2013-04-03T22:26:07.713 回答