0

ポップアップ情報ウィンドウでクリックできるようにしたい市場を生成するこのコードがあります。

for (i = 0; i < marker_array.length; i++) {
    var point = new GLatLng(marker_array[i][0], marker_array[i][1]);
    var marker = new GMarker(point, markerOptions);

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html_data);
        });
    map.addOverlay(marker);
    }

問題は、クリックできる市場が 1 つしかないことです。どちらがクリックされても、1 つのクリック可能なマーカーのデータを含む情報ウィンドウが、その 1 つのクリック可能なマーカーの上にポップアップ表示されます。すべてのマーカーが読み込まれ、正しい場所にあるため、問題はそれぞれのポップアップ ウィンドウ データを表示することだけです。

ここでマーカー関数の「展開」に関するセクションをチェックアウトしましたが、おそらくそれが間違っているようですが、提案された変更をテストしてこれを機能させることができませんでした。

4

4 に答える 4

1

あなたの問題は、変数 html_data がこのループのすべての反復で同じであることだと思います。値が異なるようにするには、ループ内の通過ごとにその変数を更新する必要があります。

于 2008-12-18T13:56:30.263 に答える
0

HTMLのマーカーデータと一致する配列を使用しましたが、うまく機能します。

function createMarker(posn, title, icon, i) {
    var marker = new GMarker(posn, {title: title, icon: icon, draggable:false});
    GEvent.addListener(marker, 'mouseover', function() { 
        map.closeInfoWindow()
        marker.openInfoWindowHtml(infoText[i])

     } );   
    return marker;
}
于 2008-12-13T18:45:53.567 に答える
0

私がフォローしているかどうかはよくわかりませんが、すべてのポップアップに同じデータが含まれていると言っているのですか?

これが問題だと思います。これは、イベント リスナーの動作に問題があるためです。クリック機能が発生すると、リスナー イベントが評価されます。したがって、変数は常に書き換えられるため、表示している HTML は常に同じです。

于 2008-12-13T03:23:05.320 に答える
0

同じケースを見つけました。この問題の解決策があります。Marker クラスを拡張するカスタム クラスを作成することをお勧めします。このカスタム クラスでは、データのパラメーターを持つコンストラクターを作成する必要があります。このクラスには、メイン アプリケーションから呼び出される独自の情報ウィンドウ変数も必要です。例えば:

カスタムクラス:

public class StoreSpot extends Marker
{  
    public var infoWindow:InfoWindowOptions;
    public var store_id:String;
    public var address:String;
    public var name:String;
    ...
}

主な用途:

tempMarker = new StoreSpot(
    tempLatlng,
    new MarkerOptions({
        icon:new spotStore(), 
        iconAlignment:MarkerOptions.ALIGN_HORIZONTAL_CENTER,
        iconOffset:new Point(0,-50)
    }),
    temp.store_id,
    temp.name,
    temp.address,
    temp.detail
);

このようにして、マーカーごとに異なる情報ウィンドウを配置できます。これがうまくいくことを願っています。ここにコードを入力してください。

于 2009-11-29T18:16:45.193 に答える