我正在制作一些有趣的代码,而且我被困了。
在JS文件的第66行。它无法定义数据......它在范围内吗?
请帮帮我。
http://codepen.io/shiva112/pen/JGXoVJ
function PlaceMarkers(data){
for (i = 0; i < data.length - 1; ++i) {
if (data[i].country == "NL"){
map.addMarker({
lat: data[i].lat,
lng: data[i].lng,
title: 'Marker with InfoWindow',
infoWindow: {content: "Station: " + data[i].name},
click: function(e) {
$("#info h2").remove();
$("#info").append( "<h2>U hebt station " + data[i].name + " geselecteerd.</h2>" );
}
});
}
}
追加行不起作用。 data [i] .name 2行以上是在范围内!但为什么不在追加行中的数据[i] .name ..
答案 0 :(得分:4)
data[i].name
不会被评估,直到for循环结束,并且值已更改。您可以创建一个立即调用的函数表达式来解决这个问题:
function PlaceMarkers(data) {
for (i = 0; i < data.length; ++i) {
if (data[i].country == "NL") {
(function(station) {
map.addMarker({
lat: station.lat,
lng: station.lng,
title: 'Marker with InfoWindow',
infoWindow: {
content: "Station: " + station.name
},
click: function(e) {
$("#info h2").remove();
$("#info").append("<h2>U hebt station " + station.name + " geselecteerd.</h2>");
}
});
})(data[i]);
}
}
}
答案 1 :(得分:0)
就像@JasonP所说的那样,点击处理程序i
在for循环结束之后才会被评估。
您可以设置自定义密钥name
,然后使用this.name
这样访问它:
map.addMarker({
lat: data[i].lat,
lng: data[i].lng,
name: data[i].name,
title: 'Marker with InfoWindow',
infoWindow: {content: "Station: " + data[i].name},
click: function(e) {
$("#info h2").remove();
$("#info").append( "<h2>U hebt station " + this.name + " geselecteerd.</h2>" );
}
});