Javascript 谷歌地图apiv3,每个标记都有相同的点击功能
我似乎遇到了一个问题,我看到了很多infobox的实现,但似乎无法理解如何在标记上插入另一段代码。我对javascript非常缺乏经验,所以我似乎无法理解它 当我转到地图时,它会显示所有标记,但只选择数组中最后一段代码 代码:Javascript 谷歌地图apiv3,每个标记都有相同的点击功能,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我似乎遇到了一个问题,我看到了很多infobox的实现,但似乎无法理解如何在标记上插入另一段代码。我对javascript非常缺乏经验,所以我似乎无法理解它 当我转到地图时,它会显示所有标记,但只选择数组中最后一段代码 代码: function updateMap() { var map = new google.maps.Map(document.getElementById('map'), { zoom: 4, center: locationarray[0]
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]工作正常,因此它没有超出此函数的范围。尝试类似的操作:
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或任何您想要的变量时,系统将尝试查找具有此名称的最后一个值。因此,如果值更改,结果将是变量的最后一次更新
在这里,当您尝试读取i时,您曾经在for中更新i,因此最后一个值将为99
如果要在侦听器中读取i的值,必须创建一个iLife,并在参数中传递i、contentString和markernumber的实际值
如果你想了解更多关于闭包或IIFE的细节,你必须在文档中找到一些信息,但其中有一段话。这是我能找到的最好的
如果您有问题,请告诉我谷歌地图apiv3为每个标记提供了相同的单击功能-不,您正在这样做。。。事件处理程序中的i对于每次标记单击将为100。对不起,我以前的帖子有一个错误,但现在它通常是可以的。