1

このトピックがすでに何度も議論されていることは知っていますが、問題を解決できません。マップ上にいくつかのマーカーを表示し、それぞれにクリック イベントを追加したいと考えています。クリック イベントごとに、いくつかのデータを含む情報ウィンドウを開く必要があります。

ここに私が書いたものがあります; このコードはコンソールでエラーなしで実行され、すべてのマーカーが正しく表示されますが、クリック時に表示される情報ウィンドウは常にすべて同じです...

//Global variable
var info = new google.maps.InfoWindow();

//... some other functions

function createMarker(map)
{
    for(i = 0 ; i < loadedMarkers.length ; i++) { 
        (function(i) {
            value = loadedMarkers[i];
            var pos = new google.maps.LatLng(value.Latitude, value.Longitude);

            var mapOptions = {
                zoom: 10,
                center: pos,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            }

            var marker = new google.maps.Marker({
                position: pos,
                map: map,
                title: value.Title
            });

            var MarkerContent = "<div class=\"marker\">" +
                                    "<h2>"+ value.Title +"</h2>" +
                                    "<p>"+ value.Text +"</p>" +
                                "</div>";

            info.setOptions({
                content: MarkerContent,
                size: new google.maps.Size(50, 50),
                position: pos
            });

            google.maps.event.addListener(marker, 'click', function () {
                info.open(map, marker);
            }); 
         }
       )(i);
    }
}

いくつかの閉鎖の問題について聞いたので(私はJSが初めてです)、ロジックを(関数(i)...)に入れようとしましたが、すべての情報ウィンドウで常に同じコンテンツが表示されます。

誰かが私が間違っている場所を説明してもらえますか (そしてその理由は?)

どうもありがとうございます

4

1 に答える 1

3

開いたときに情報ウィンドウのコンテンツを更新する必要があります (そうしないと、最後のコンテンツが表示されます)。

    google.maps.event.addListener(marker, 'click', function () {
        info.setOptions({
            content: MarkerContent
        });
        info.open(map, marker);
    }); 
于 2013-07-21T16:47:50.483 に答える