如何解决在Google Maps API v3的循环中添加标记侦听器?
| 我有一堆标记,希望为每个标记添加一个鼠标悬停处理程序。我正在遍历坐标,创建新标记,然后添加处理程序。我希望在处理程序中使用特定的ID修改DOM元素。 问题是,即使在循环中id在每次迭代中都在变化,实际应用的处理程序都使用最后生成的postId。for(i in results)
{
r=results[i][0];
var postId=results[i][1]; // Different for each i
if (status == google.maps.GeocoderStatus.OK)
{
markers.push(new google.maps.Marker({
map: map,position: r[0].geometry.location
}));
console.log(postId);
google.maps.event.addListener(markers[markers.length-1],\'mouseover\',function() {
console.log(postId);
});
}
}
问题是,无论我将鼠标悬停在哪个标记上,postId都将被打印为“ 1”。
但是,当我遍历循环时,每次的postId都不相同。
控制台输出:
21
20
12
10
9
3
2
1
但是,当我将鼠标悬停在标记上时,它总是显示1。
解决方法
那是因为您创建了一个所有听众共享的全局
postId
。您可以这样创建私有版本:
(function () {
var postId=results[i][1];
google.maps.event.addListener(markers[markers.length-1],\'mouseover\',function() {
console.log(postId);
});
})();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。