我有一堆标记,并希望为每个标记添加一个鼠标悬停处理程序。我循环遍历我的坐标,创建新标记,然后添加处理程序。在处理程序中,我希望它能够使用特定的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。
答案 0 :(得分:6)
那是因为您创建了一个全局postId
所有侦听器共享。您可以像这样创建私有版本:
(function () {
var postId=results[i][1];
google.maps.event.addListener(markers[markers.length-1], 'mouseover', function() {
console.log(postId);
});
})();