gpt4 book ai didi

javascript - 为什么我的谷歌地图事件监听器无法正常工作?

转载 作者:行者123 更新时间:2023-11-27 23:59:06 24 4
gpt4 key购买 nike

我正在尝试处理每个标记的鼠标悬停监听器(有 30 个标记)并显示这些标记的信息窗口。我为每个标记创建了监听器,但是当我的鼠标悬停在某个标记上时,它始终显示最后一个标记的信息窗口。总而言之,我听不到其他标记。任何帮助,将不胜感激。提前致谢,这是我的代码:

var listeners = [];
for(var i = 0; i < markers.length; i++){
var marker = markers[i];
var contentString = contents[i];
listeners[i] = new google.maps.event.addListener(marker, 'mouseover', function() {
var hideInfoWindows = function(){
for (var j = 0; j < util.Common.infowindows.length; j++) {
util.Common.infowindows[j].close();
}
}
var addInfoWindow = function(){
var infowindow = new google.maps.InfoWindow({
content: contentString
});
//hideInfoWindows();
util.Common.infowindows.push(infowindow);
infowindow.open(util.Common.googlemap,marker);
}
addInfoWindow();
});
}

我也在使用js cluster library但我认为问题与此无关。

最佳答案

我认为你的问题可能是你没有在循环内使用闭包,并且当事件监听器被触发时,markercontentString变量指向到最后一个标记。

尝试像这样重写循环:

var listeners = [];
for(var i = 0; i < markers.length; i++){
(function(index){ //create a closure, variable 'index' will take its value from variable i, but won't be affected by changed i in the outer scope
var marker = markers[index]; //use this scope's index variable instead of i
var contentString = contents[index]; //use this scope's index variable instead of i
listeners[index] = new google.maps.event.addListener(marker, 'mouseover', function() {
var hideInfoWindows = function(){
for (var j = 0; j < util.Common.infowindows.length; j++) {
util.Common.infowindows[j].close();
}
};
var addInfoWindow = function(){
var infowindow = new google.maps.InfoWindow({
content: contentString
});
//hideInfoWindows();
util.Common.infowindows.push(infowindow);
infowindow.open(util.Common.googlemap,marker);
};
addInfoWindow();
});
})(i);
}

关于javascript - 为什么我的谷歌地图事件监听器无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983445/

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