5

GMaps v3 マーカーの 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

The problem you are having is the value of mark is global and is left set to the last value in the loop. The issue can be fixed with a function closure. I think this will work (not tested):

 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 に答える