让我解释一下我的意思"记忆"。我有谷歌地图。我为地图制作了一系列标记,并为每个标记添加了监听器。
for( var venue in response.markers ){
var loc = new google.maps.LatLng(response.markers[venue].GPSX, response.markers[venue].GPSY);
var marker = new google.maps.Marker({
position: loc,
title: response.markers[venue].VenueName,
map: map
});
google.maps.event.addListener(marker, 'click', function() {
alert(venue);
});
markers.push(marker);
}
当点击标记时,场地具有许多响应标记的值。标记。如何让听众在创建时提醒或使用原始价值场所?例如,第一个标记应该警告0,第二个标记应该警告,依此类推。
答案 0 :(得分:2)
在JavaScript中完成for循环后,变量仍然存在。但是他们被设定为他们最终得到的任何价值。因此,当最终调用click函数时,places是response.markers
中的最后一项。
我会在函数上使用bind方法创建一个新函数,并在正确的时间绑定适当的参数。像这样:
function alertVenue(venue) {
alert(venue);
}
for( var venue in response.markers ){
// other stuff goes here
google.maps.event.addListener(marker, 'click', alertVenue.bind(this, venue));
markers.push(marker);
}
使用bind
的好处是你的堆栈跟踪看起来更好(因为alertVenue是一个命名函数),并且很清楚当你读它时会发生什么。
答案 1 :(得分:1)
您可以执行以下操作:
google.maps.event.addListener(marker, 'click', (function(venue) {
return function(){alert(venue)};
}(venue)));
避免使用外部场地。
进行关闭