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);
}
}
}
是否有人知道如何根据所选标记显示地址?
答案 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]