5

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。

感谢和问候

4

1 回答 1

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);
 }
于 2012-06-27T23:54:32.003 回答