GMaps v3 Markers AddListener始终获取for循环中的最后一个变量索引

时间:2012-06-27 23:12:34

标签: google-maps google-maps-markers

GMaps v3 Markers AddListener问题

我正在尝试将mouseover / mouseout事件监听器添加到我的标记中,但我总是得到for循环的最后一个值在所有事件中,它似乎得到for的最后一个值而不是当前值。这是我的代码

for( mark in data ) {
    markers[mark] = new google.maps.Marker({
              position: new google.maps.LatLng(data[mark].lat,data[mark].lng), map: map,
            });
google.maps.event.addListener(markers[mark], "mouseover", function() {
                alert(mark);
            });
            google.maps.event.addListener(markers[mark], "mouseout", function() {
                alert(mark);
            });
        }

结果是鼠标上/下的警报,所有10个标记的值都相同,我希望每个警报都有标记ID。

感谢 此致

1 个答案:

答案 0 :(得分:10)

你遇到的问题是mark的值是全局的,并且被设置为循环中的最后一个值。可以通过函数闭包修复该问题。我认为这样可行(未经测试):

 function createMarker(latlng, id)
 {
    var marker= new google.maps.Marker({
          position: latlng, map: map,
          });
    google.maps.event.addListener(marker, "mouseover", function() {
            alert(id);
          });
    google.maps.event.addListener(marker, "mouseout", function() {
            alert(id);
          });
    return marker;
 }
 for( mark in data ) {
   markers[mark] = createMarker(new google.maps.LatLng(data[mark].lat,data[mark].lng),
                                mark);
 }