0

複数のマーカー (>1000) を含む Google マップをページに配置しようとしていますが、それぞれに独自の情報ウィンドウがあります。配列を介してマーカーを追加していますが、マーカーは問題なく表示されますが、すべての情報ウィンドウの内容はまったく同じです。私は途方に暮れており、あなたの情報に大いに感謝します. これが私のコードです:

<script>
var map;
var markersArray = [];
var infowindow =  new google.maps.InfoWindow({
    content: ''
});

function initialize() {

    bounds = new google.maps.LatLngBounds();

    usa = new google.maps.LatLng(37.09024, -95.712891);

    var myOptions = {
        zoom: 4, 
        center: usa,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        navigationControlOptions: {
            style: google.maps.NavigationControlStyle.SMALL
        }
    };

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    plotMarkers();
}

// here is where the array content is contained
var webApps = [<%=strArray%>];

function plotMarkers(){
    var i;
    for(i = 0; i < webApps.length; i++){
        codeAddresses(webApps[i]);
    }
}

function codeAddresses(address){

    // other variables
    lat = address[3];
    lng = address[4];
    desc = address[0]

    myLatlng = new google.maps.LatLng(lat,lng);

    var marker = new google.maps.Marker({
        position: myLatlng,
        map: map,
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(desc);
        infowindow.open(map, this);
    });

}

google.maps.event.addDomListener(window, 'load', initialize);
</script>
<div id="map_canvas" style="width: 100%; height: 600px;"></div>
4

2 に答える 2

2

descグローバル変数のようです。したがって、ループの各反復で、それを別のものに設定します。つまり、反復した最後のアイテムの説明と常に等しくなります。

varローカル変数にするために、その前に置いてみてください。例: var desc = address[0];.

これを行うと、「クロージャー」と呼ばれる概念により、作成するすべてのリスナーがdesc、最後に設定された値ではなく、作成時の値を参照するようになります。

いくつかの理由から、グローバル変数を使用しないことをお勧めします。これはその 1 つです。変数の前にvar.

変数のスコープに関する情報:

http://msdn.microsoft.com/en-us/library/ie/bzt2dkta(v=vs.94).aspx

閉鎖に関する情報:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

于 2013-08-02T02:38:07.900 に答える
0

私は同じ問題を抱えていましたが、最終的にドキュメントにこれに対処する記事があることがわかりました:

https://developers.google.com/maps/documentation/javascript/examples/event-closure

Kai が言及したグローバル変数とローカル変数に加えて、関数クロージャも把握する必要があります。つまり、情報ウィンドウの説明を割り当てるコード部分と、イベント リスナーを追加するコード部分は、別の関数である必要があります。

詳細については、上記の記事を参照してください。

于 2013-11-13T02:47:09.103 に答える