コードは次のように非常に単純です。
var populateGoogleMap = function (points) {
for (i = points.length - 1; i >= 0; i--) {
var marker = new google.maps.Marker({
map: map,
draggable: true,
animation: google.maps.Animation.DROP,
position: new google.maps.LatLng(point.target.x, point.target.y)
});
google.maps.event.addListener(marker, 'click', function (e) {
toggleBounce(marker);
});
nodes[i].marker = marker;
}
};
marker
intoggleBounce(marker)
は常に最後に作成されることmarker
がわかります。この問題について少し考えてみたところ、関数を変更することで解決策が見つかりました。関数内のループを削除し、他の場所でループを使用してこの関数を複数回呼び出しました。だから基本的に今はなるfor (i = 0; i < points.length; i++) { populateGoogleMap(point); }
。
この動作は Google Maps API が意図したものですか? 変数は現在のコンテキストの変数を参照する必要があるため、これは多くの人を混乱させる可能性があると思います。