【问题标题】:Google map info box run incorrectly谷歌地图信息框运行不正确
【发布时间】:2013-04-04 06:26:07
【问题描述】:

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

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 可能重复。我已经尝试了在这里找到的所有解决方案,但没有一个有效。

【问题讨论】:

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


    【解决方案1】:

    是的,这与您链接到的另一个问题完全相同,并且您的代码的解决方案是相同的 - 将创建每个标记的代码放入一个函数中,然后在循环中调用该函数:

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

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 1970-01-01
      • 2013-01-07
      • 2013-02-03
      • 2013-02-10
      • 2012-03-28
      • 1970-01-01
      • 2013-02-16
      • 2021-09-21
      相关资源
      最近更新 更多