gpt4 book ai didi

javascript - 我想让 model[i].marker.addListener ('click' , function() { 在 for 循环之外

转载 作者:行者123 更新时间:2023-11-29 23:44:33 25 4
gpt4 key购买 nike

此代码运行但不符合javascript 最佳实践,我想添加 model[i].marker.addListener('click', function() 在 for 循环之外,但我遇到了问题。

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 的牺牲品(那是我贫血的小博客上的一篇文章);请务必使用 var 声明 locInfo

关于javascript - 我想让 model[i].marker.addListener ('click' , function() { 在 for 循环之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44485138/

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