2

地図上にショップを表すマーカーを描いています。

クリックされたマーカーごとに、前にクリックされたマーカーで閉じた直後に表示される単一のグローバル情報ウィンドウがあります。

場合によっては、いくつかのショップが同じ住所を持っているため、マーカーが互いに重なり合って表示され、1つは一番上のマーカーしか見ることができません。

これを解決するために、infoWindowにページ付けを追加しました。

問題は、一番上のマーカーがリストの最後のマーカーであるため、infoWindowに最新のショップの情報が表示され、ページネーションに最初のショップと「次へ」ボタンが表示されるのではなく、「戻る」ボタンが表示されることです。

このように「for」ループの順序を逆にしてみましfor (i=limit; i>0; i--)たが、機能しません。マップは、ajaxリクエストを実行しているかのようにスタックします。

コードは次のとおりです。

function drawShopsMarkers(){
    var marker;
    markersArray = [];
    var i;
    var limit = globalShopsArr.length;

    for (i=0; i<limit; i++){
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(globalShopsArr[i].shopLat, globalShopsArr[i].shopLng), 
            map: map,
            title: globalShopsArr[i].shopTitle
        });

        markersArray.push(marker);
        marker.setMap(map);

        google.maps.event.addListener(markersArray[i], 'click', makeListener(i));
    }

    function makeListener(index) {
        return function() {
            globalInfowindow.disableAutoPan=true;
            globalInfowindow.open(map,markersArray[index]);

            CreateInfoWindowString(index);

            globalInfowindow.setOptions({
                content: globalContentString
            });
        }
    }       
}

このCreateInfoWindowString()関数はglobalContentString、ページネーションを含めて単純にデータを入力します。

問題の原因を教えてください。

4

1 に答える 1

1

試す

for (i=limit-1;i>=0;i--)

コメントで提案されたように。関数をマーカーにアタッチするときにも、線を変更する必要があります。マーカーを配列にプッシュすると、マーカーは蓄積されますが、存在しない要素に関数をアタッチします。別の変数を使用して、ループ内でインクリメントします。

c ++

この行

google.maps.event.addListener(markersArray [i]、.......。
ループを変更してiをデクリメントし、markersArray [i]を試すと、要素iがまだ配列に含まれていないため、エラーが発生する必要があります。したがって、ac変数を作成し、私が書いたように代わりにそれを使用し、iの代わりにcを使用するように行を変更します。

于 2012-11-05T17:21:56.420 に答える