简单地说,我试图为循环中的每个属性动态创建一个标记和相应的标签。标签将包含时间戳。
但是,我相当困惑于弄清楚如何让单击功能保持与其各自的标记的绑定(bind)。还有 infowindow 变量。
我尝试使用计数器并创建变量数组来引用每个函数。我还尝试过 eval 并在全局窗口中创建新变量
窗口[“foo”+计数器]
没有成功。对于我尝试过的所有变体,代码已损坏或导致所有触发器/信息窗口都绑定(bind)到同一属性。
任何帮助或指导将不胜感激。我认为我只是缺少一些理解变量/对象范围的深度。此基本代码会导致出现所有标记和最终标签(因为之前的标签被覆盖),如下所示。
变量:
prop = string representing long,lat coordinates
obj[prop] = An ISOformat timestamp
其余代码取自marker Labels Google Maps API
for (var prop in obj) {
// skip loop if the property is from prototype
if(!obj.hasOwnProperty(prop)) continue;
var templocs = prop.split(",").map(Number);
console.log(templocs[0]);
var temppos = new google.maps.LatLng(templocs[0], templocs[1]);
var mark = new google.maps.Marker({
position:temppos,
map: map,
animation:google.maps.Animation.BOUNCE,
});
var infowindow = new google.maps.InfoWindow({
content: "date taken: " + obj[prop],
maxWidth: 200
});
mark.addListener('click', function() {
infowindow.open(map, mark);
});
}
最佳答案
var cnt = 0;
var infowindow = [];
var mark = [];
var bounds = new google.maps.LatLngBounds();
for (var prop in obj) {
// skip loop if the property is from prototype
if(!obj.hasOwnProperty(prop)) continue;
var templocs = prop.split(",").map(Number);
console.log(templocs[0]);
var temppos = new google.maps.LatLng(templocs[0], templocs[1]);
infowindow[cnt] = new google.maps.InfoWindow({
content: "date taken: " + obj[prop],
maxWidth: 200
});
mark[cnt] = new google.maps.Marker({
position: temppos,
map: map,
animation:google.maps.Animation.BOUNCE,
});
/* mark[cnt].addListener('click', function() {
infowindow[cnt].open(map, mark);
}); */
google.maps.event.addListener(mark[cnt], 'click', (function(markerrr, cnt) {
return function() {
infowindow[cnt].open(map, mark[cnt]);
}
})(mark[cnt], cnt));
bounds.extend(mark[cnt].getPosition());
cnt++;
}
已修复。这篇文章是this one的重复。
问题与关闭有关。
关于Javascript动态函数创建Google Maps Markers对象循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35378570/