在google maps api v3中循环添加标记侦听器?

Raz*_*orm 2 javascript jquery google-maps google-maps-api-3

我有一堆标记,并希望为每个标记添加一个鼠标悬停处理程序.我循环遍历我的坐标,创建新标记,然后添加处理程序.在处理程序中,我希望它能够使用特定的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);
        });
    } 
}
Run Code Online (Sandbox Code Playgroud)

问题是无论我将鼠标悬停在哪个标记上,postId都会被打印为"1".

但是当我进行循环时,postId每次都不同.

控制台输出:

21
20
12
10
9
3
2
1
Run Code Online (Sandbox Code Playgroud)

但是,当我将鼠标悬停在标记上时,它总是说1.

mhy*_*itz 7

那是因为你创建了一个postId所有听众共享的全局.你可以像这样创建私有版本:

(function () {
    var postId=results[i][1];
    google.maps.event.addListener(markers[markers.length-1], 'mouseover', function() {
        console.log(postId);
    });
})();
Run Code Online (Sandbox Code Playgroud)