Javascript 谷歌地图不显示标记的描述
我想在单击标记时显示标题/说明。标记正在显示,但单击“说明”时未显示。我在控制台日志中看到错误消息是“UncaughtTypeError:无法读取第40行未定义的属性“0”,我不知道我的代码有什么问题,有人能帮我吗Javascript 谷歌地图不显示标记的描述,javascript,php,jquery,google-maps,google-maps-api-3,Javascript,Php,Jquery,Google Maps,Google Maps Api 3,我想在单击标记时显示标题/说明。标记正在显示,但单击“说明”时未显示。我在控制台日志中看到错误消息是“UncaughtTypeError:无法读取第40行未定义的属性“0”,我不知道我的代码有什么问题,有人能帮我吗 var位置=[ [‘亚洲’,‘亚洲’], [“美国”,“美国”], [“印度”,“印度”] ]; var map=new google.maps.map(document.getElementById('map'){ 缩放:1, 中心:新google.maps.LatLng(0,0
var位置=[
[‘亚洲’,‘亚洲’],
[“美国”,“美国”],
[“印度”,“印度”]
];
var map=new google.maps.map(document.getElementById('map'){
缩放:1,
中心:新google.maps.LatLng(0,0),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infowindow=new google.maps.infowindow();
var标记,i;
对于(i=0;i
#地图{
高度:400px;
宽度:500px;
}
为了理解它为什么不起作用,我们需要理解闭包是如何起作用的
闭包可以访问它自己的范围(在它的花括号中定义的变量),可以访问外部函数的变量,也可以访问全局变量
需要注意的重要一点是,即使在外部函数返回并存储对实际变量的引用之后,闭包也可以访问外部函数的变量
现在,在您的代码中,for循环在JavaScript中没有作用域,变量只声明一次
现在重要的是,异步代码在所有同步代码完成之前无法运行。因此,当getJSON回调运行时,因为它们在同一个变量i上有一个闭包,所以它们都使用当前值i,因为回调是在循环完成回调创建之后运行的
现在为了解决这个问题,我们可以使用一个新函数来运行它自己的作用域,这样在循环中的回调中,每个不同的值都有一个新的闭包
这是更新后的代码。修改了getJSON部分并添加了必需的闭包
var位置=[
[‘亚洲’,‘亚洲’],
[“美国”,“美国”],
[“印度”,“印度”]
];
var map=new google.maps.map(document.getElementById('map'){
缩放:1,
中心:新google.maps.LatLng(0,0),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infowindow=new google.maps.infowindow();
var标记,i;
对于(i=0;i
#地图{
高度:400px;
宽度:500px;
}
为了理解它为什么不起作用,我们需要理解闭包是如何起作用的
闭包可以访问它自己的范围(在它的花括号中定义的变量),可以访问外部函数的变量,也可以访问全局变量
需要注意的重要一点是,即使在外部函数返回并存储对实际变量的引用之后,闭包也可以访问外部函数的变量
现在,在您的代码中,for循环在JavaScript中没有作用域,变量只声明一次
现在重要的是,异步代码在所有同步代码完成之前无法运行。因此,当getJSON回调运行时,因为它们在同一个变量i上有一个闭包,所以它们都使用当前值i,因为回调是在循环完成回调创建之后运行的
现在为了解决这个问题,我们可以使用一个新函数来运行它自己的作用域,这样在循环中的回调中,每个不同的值都有一个新的闭包
这是更新后的代码。修改了getJSON部分并添加了必需的闭包
var位置=[
[‘亚洲’,‘亚洲’],
[“美国”,“美国”],
[“印度”,“印度”]
];
var map=new google.maps.map(document.getElementById('map'){
缩放:1,
中心:新google.maps.LatLng(0,0),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infowindow=new google.maps.infowindow();
var标记,i;
对于(i=0;i