gpt4 book ai didi

Javascript 闭包不适用于谷歌地图 V3

转载 作者:行者123 更新时间:2023-11-28 02:51:50 27 4
gpt4 key购买 nike

有人可以告诉我这段代码做错了什么吗?

我目前正在使用一个简单的 JSON 文件来通过 Google map V3 API 为信息窗口提供数据。我知道闭包的概念,但似乎无法理解为什么信息窗口仍然显示点击时的最后结果。

这是我的 JSON 文件:

{ "markers": [
{
"lat": 51.5001524,
"lng": -0.1262362,
"firstName": "nameOne"
},
{
"lat": 55.8656274,
"lng": -4.2572227,
"firstName": "nameTwo"
},
{
"lat": 43.834526782236814,
"lng": -37.265625,
"firstName": "nameThree"
}
] }

这是我的 JS:

(function(){

function initialize() {
var latlng = new google.maps.LatLng(51.5001524, -0.1262362)

var myOptions = {
zoom: 3,
center: latlng,
mapTypeId: google.maps.MapTypeId.TERRAIN
}

var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);

function parseJson(){
$.ajax({
url: 'assets/js/markers.json',
dataType: 'json',
success: function(data) {
processMarkers(data)
},
error: function (data) {
console.log('fail')
}
})
}

function processMarkers(data){

var totalMarkers = data.markers.length;
for(i=0;i<totalMarkers;i++){
var latitude = data.markers[i].lat;
var longditude = data.markers[i].lng;
var putMarker = new google.maps.LatLng(latitude, longditude);
var thisMarker = new google.maps.Marker({
position: putMarker,
map: map
});

var firstName = data.markers[i].firstName;
var infoWindow = new google.maps.InfoWindow({
position: putMarker,
content: firstName
});

new google.maps.event.addListener(
thisMarker,
'click',
buildHandler(map, thisMarker));
}

function buildHandler(map, marker){
return function(){
infoWindow.open(map, marker);
};
}

}

parseJson();

}

$(document).ready(function(){
initialize();
});
})();

任何帮助将不胜感激。

干杯

最佳答案

infoWindow 是 processMarkers 范围内的一些变量。对于每个标记,一遍又一遍地迭代同一个信息窗口,在最后一次迭代后将其孤立(并将其设置为最终标记)。孤儿不会死,因为它是在点击处理程序的关闭中捕获的。我不太了解 google api,无法预测 .open() 上应该发生什么。但 infoWindow 在这一点上看起来不太好......

编辑:事实上,在我看来,除了最后一个之外的每个信息窗口都是垃圾收集器的受害者。或者它在某处被引用?我看不出来。

编辑:请记住,JS 没有 {} 作用域(例如 C)。它只有功能范围!换句话说,只需将 infoWndow 传递到您的 buildHandler() 中即可。

关于Javascript 闭包不适用于谷歌地图 V3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595260/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com