我似乎遇到了一个问题,我看到了很多信息框的实现,但似乎无法弄清楚如何在标记上插入另一段代码。我对javascript很缺乏经验,所以我似乎无法弄明白。
当我去地图时,它会显示所有标记,但只选择数组中最后一段代码,
代码:
function updateMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: locationarray[0]
});
var markernumber = new Array();
for (var i = 0; i < 99; i++) {
markernumber[i] = new google.maps.Marker({
position: locationarray[i],
map: map
});
console.log('in loop:' + i);
google.maps.event.addListener(markernumber[i], 'click', function() {
console.log('in click:' + i);
openInNewTab(contentString[i]);
});
}
document.getElementById('loader').style = "opacity: 0;";
}
contentstring [i]工作正常,所以除了这个功能之外没什么。
答案 0 :(得分:-1)
尝试类似的东西:
var markernumber = new Array();
for (var i = 0; i < 4; i++) {
markernumber[i] = new google.maps.Marker({
position: position[i],
map: map
});
console.log('in loop:' + i);
(function (i, content, marker) {
google.maps.event.addListener(marker, 'click', function (e) {
console.log('in click:' + i);
//console.log(e);
});
})(i, contentString[i], markernumber[i]);
}
你有一个关闭错误。这意味着当执行侦听器时,i
值已经更改(进入for
)并且传递到99.
以订单方式解释。当您调用i
或您想要的变量时,系统将尝试使用此名称查找最后一个值。因此,如果值发生变化,结果将是最后一次更新&#34;变量。
在这里,当您尝试阅读i
时,您已经&#34;更新&#34; i
中for
,因此最后一个值为99。
如果要在侦听器中读取i
的值,则必须创建IIFE并将参数传递给i
,contentString
和{{1}的实际值}}
如果你想了解关于闭包的更多细节或documentation关于IIFE的更多细节,请咨询here(你必须在文档中找到一点但是有一段经文。这是最好的和可以找到)。
如果您有疑问,请告诉我