该代码可以运行,但是不符合javascript的最佳做法,请在循环之外添加model[i].marker.addListener('click', function()
,但是出现问题。
function pushMarkers() {
locInfo = new google.maps.InfoWindow();
for (var i = 0; i < model.length; i++) {
var loc = model[i].places;
var title = model[i].title;
model[i].marker = new google.maps.Marker({
position: loc,
title: title,
animation: google.maps.Animation.DROP,
map: map,
id: i
});
console.log(model[i].title);
model[i].marker.addListener('click', function() {
console.log('InfoWindow Loop entered');
toggleBounce(this);
populateInfoWindow(this, locInfo);
});
wikiLink(model[i].marker);
}
}
最佳答案
您只需创建一个用作回调的命名函数,然后使用它:
function pushMarkers() {
// Create it
function mapClickCallback() {
console.log('InfoWindow Loop entered');
toggleBounce(this);
populateInfoWindow(this, locInfo);
}
locInfo = new google.maps.InfoWindow();
for (var i = 0; i < model.length; i++) {
var loc = model[i].places;
var title = model[i].title;
model[i].marker = new google.maps.Marker({
position: loc,
title: title,
animation: google.maps.Animation.DROP,
map: map,
id: i
});
console.log(model[i].title);
model[i].marker.addListener('click', mapClickCallback); // <−−−− Use it
wikiLink(model[i].marker);
}
}
可以在
locInfo
上方定义函数,这很好,但是如果您愿意,可以将函数声明放在pushMarkers
中的任何位置,只要它位于该函数的顶层即可。 (自ES2015起,不在顶层使用函数声明是已定义的行为,但是这里不需要这样做,并且规则也有些复杂。)旁注:您的代码成为The Horror of Implicit Globals的猎物(这是我贫乏的小博客上的文章);确保使用
locInfo
声明var
。