1

私は OVERlappingMArkerSpiderfier で遊んでいます

https://github.com/jawj/OverlappingMarkerSpiderfier

マーカーを追加するループがありますが、各マーカーにはコンテンツとして一意のテキストを含めるために infoWindow が必要です。

私が次のことをした場合:

content = '<div id="info">' +
                '<p><b><?php echo $row->Event ?></b></p>' +
                '<p><?php echo $row->Date ?></br>' +
                '<?php echo $row->City . ", " . $row->Country ?></p>' +
                '</div>';

oms.addListener('click', function(myMarker) {
         if(!iw){
            iw = new google.maps.InfoWindow();
         };

       iw.setContent(content);
      //  iw.setContent(myMarker.title);
        iw.open(map, myMarker);
      });

これは、最後のイベントを情報ウィンドウに表示するだけです。

私がこれをやろうとすると:

(function(content, myMarker){
    oms.addListener('click', function(myMarker) {
         if(!iw){
            iw = new google.maps.InfoWindow();
         };

       iw.setContent(content);
      //  iw.setContent(myMarker.title);
        iw.open(map, myMarker);
      });
})();

...まったく機能しません

誰でも光を当てることができますか?

私は言及しませんでした:私はJavaScriptに比較的慣れていません。

4

1 に答える 1

4

まず、チェックiw = new google.maps.InfoWindow();を避けるために関数の外に設定します。if(!iw)

次に、oms.addListener1 つだけでなくすべてのマーカーに適用されるため、これは結果のループ内にあってはなりません (これは while $row=$results タイプのループ内にあると想定しています)。

正しいコンテンツを表示するにはmarker.desc = content、ループ内で次のようなことを行い、addListener 内で次のようにします。iw.setContent(myMarker.desc);

だから、このようなもの:

iw = new google.maps.InfoWindow();

oms.addListener('click', function(myMarker) {
    iw.setContent(myMarker.desc);
    iw.open(map, myMarker);
});

<?php while... { ?>
    ...
    content = '<div id="info">' +
        '<p><b><?php echo $row->Event ?></b></p>' +
        '<p><?php echo $row->Date ?></br>' +
        '<?php echo $row->City . ", " . $row->Country ?></p>' +
    '</div>';
    ...
    marker = new google.maps.Marker({
        ...
        ...
    });
    marker.desc = content;
    oms.addMarker(marker);
<?php } ?>
于 2012-07-24T16:47:42.493 に答える