在谷歌标记列表中添加地址

时间:2017-07-14 18:46:52

标签: javascript google-maps

下午好! 我有一个在谷歌地图上绘制的标记列表, 我点击标记时需要显示地址 使用下面的代码显示最后一个标记的地址

function updatePontos() { 

        markers = new Array();          
        var v = '#{TrPontoTaxiSB.pontosListTaxi}'.replace("[","").replace("]","");                          
        var arr2 = v.split(",");

        for (val2 of arr2) {
            if (val2 != "") {
                var pts = val2.split(";");
                var infowindow = new google.maps.InfoWindow();
                var marker = new google.maps.Marker({
                    position: {lat: parseFloat(pts[1]), lng: parseFloat(pts[2])},
                    draggable: false,
                    raiseOnDrag: false,
                    map: map,                       
                    title: pts[0],
                    icon: '#{facesContext.externalContext.requestContextPath}/resources/images/taxi_50.png'
                });
                google.maps.event.addListener(marker, 'click', function() {
                      infowindow.setContent(pts[4] + " <br />" + pts[5] + " <br />" + pts[6]);
                      infowindow.open(map, this);
                    });                                     
                markers.push(marker);                   
            }
        }                       
    } 

是否有人知道如何根据所选标记显示地址?

1 个答案:

答案 0 :(得分:0)

首先,看起来你现在还没有&#34; var&#34;是。 Here应该有所帮助。

你需要了解&#34; infowindow&#34;执行事件侦听器时指向代码。由于变量不会在循环的每次迭代中重新声明,因此无论您单击何种标记,它都将始终指向您创建的最后一个infoWindow。你还需要利用这个事实,即在聆听者内部,这个&#34;指向用户点击的标记。

要解决实际问题,您还需要了解closures

这是我想到的第一个解决方案,可能是一个更优雅的解决方案,但至少这个解决方案与您自己的代码有一些相似之处。我无法测试它,所以让我知道它是否以及如何失败。

function updatePontos() { 

    var markers = [];
    var infowindows = [];   
    var count = 0;       
    var v = '#{TrPontoTaxiSB.pontosListTaxi}'.replace("[","").replace("]","");                          
    var arr2 = v.split(",");
    var pts;

    for (val2 of arr2) {
        if (val2 != "") {
            pts = val2.split(";");
            infowindows[count] = new google.maps.InfoWindow();
            infowindows[count].setContent(pts[4] + " <br />" + pts[5] + " <br />" + pts[6]);
            markers[count] = new google.maps.Marker({
                position: {lat: parseFloat(pts[1]), lng: parseFloat(pts[2])},
                draggable: false,
                raiseOnDrag: false,
                map: map,
                title: pts[0],
                icon: '#{facesContext.externalContext.requestContextPath}/resources/images/taxi_50.png'
            });
            markers[count]._infoWindowIndex = count;
            google.maps.event.addListener(markers[count], 'click', function() {
              infowindows[this._infoWindowIndex].open(map, this);
            });
        }
        count++;
    }                       
} 

编辑:将标记的剩余引用更改为标记[count]