0

各マーカーにポップアップを添付しようとしています (これには OpenLayers と OpenStreetMaps を使用しています)。各マーカーは、対応するポップアップを表示する「クリック」イベントに登録されています。

ただし、特定のマーカーのクリックを待つのではなく、起動時にすべてのポップアップを実行するだけです。

約 1000 個のマーカーがあるため、このループを使用してマーカーとポップアップ (作成時に非表示) を設定しています。

for (var i = 0; i < data.length; i++) 
                {

                    if (i == 1) {

                        var lonLat = new OpenLayers.LonLat(data[i].Lon, data[i].Lat).transform(fromProjection, toProjection);
                        var zoom = 5;
                        map.setCenter(lonLat, zoom);
                    }

                    var lonLat = new OpenLayers.LonLat(data[i].Lon, data[i].Lat).transform(fromProjection, toProjection);
                    AddingPopup(lonLat);
                    AddingMarker(i, lonLat); 

そして、これらは両方を作成するための私の関数です:

function AddingMarker(i, lonLat) {

    var marker = new OpenLayers.Marker(lonLat);

    markers.addMarker(marker);
    marker.events.register('click', marker, PopupsShow(i));
};

function AddingPopup(lonLat) {

    var popup = new OpenLayers.Popup("Popup", lonLat, null, "text", true);

    map.addPopup(popup);
    popup.hide();
};

これは、実行時にすべてのマーカーに対して自動起動される関数です。

function PopupsShow(i) {

    map.popups[i].show();
};

ここで何が欠けていますか。実行時に PopupsShow 関数が開始され、マーカーがクリックされるのを待っていないのはなぜですか。私は答えを探し回っていますが、何も役に立たないようです。

ありがとう!

4

2 に答える 2

0

イベント ハンドラーは実際に引数 (イベント) を取得できます。これは、これを実行するための慣用的な方法です。また、各マーカーではなく、レイヤーにハンドラーをバインドするのが最善と考えられます。

markerLayer.events.register('click', marker,
      function(event) {
          var feature = event.feature;
          /* make popup appear */
  });

ポップアップを作成する方法はニーズに合わせて異なりますが、通常、事前に生成して show を呼び出すのではなく、ここでオンデマンドでポップアップを作成します。

于 2013-10-14T05:29:23.210 に答える