0

他のマーカーをクリックしても、情報ウィンドウが自動的に閉じません..ここにコードがあります : http://pastebin.com/PvCt2z7W

 for (var n = 0 ; n <listFavourite.length ; n++)
                    //var favouriteObject =listFavourite[n];
                       addMarker(listFavourite[n]);
                   }           
                   function addMarker(data) {
                       var marker = new google.maps.Marker({
                           position: new google.maps.LatLng(data.lattitude, data.longitude),
                           map: map,
                           title: data.address
                       });

                       var contentString = '<div id="content">'+
                           '<div id="siteNotice">'+
                           '</div>'+
                           '<h2 id="firstHeading" class="firstHeading">'+data.name+'</h2>'+
                           '<div id="bodyContent">'+
                           '<p>'+data.address+'</p>'+
                           '<p></p>'+
                           '<p>Do You Want to change search location</p>'+
                           '<input name="yes" id="yes" type="button" class="btn-common" value="Yes"/>'+
                           '</div>'+
                           '</div>';                                                   
                       var infowindow = new google.maps.InfoWindow({
                       maxWidth: 10,
                       });              
                       google.maps.event.addListener(marker, "click", function() {                     
                           infowindow.setContent(contentString);
                           infowindow.open(map, marker);                       
                       });     
                   };

私はここですべての答えを試しましたが、適切に動作させることができませんでした提案や助けをいただければ幸いです

4

2 に答える 2

2

マーカーごとに 1 つの情報ウィンドウを作成する代わりに、1 つのグローバルな情報ウィンドウ変数を用意します。その後、マーカー クリック ハンドラーで行っていることは、マーカーのコンテンツを毎回更新することだけです。ただし、コードではこれをクロージャーで行う必要があります。そうしないと、最後のマーカーのコンテンツを持つ各マーカーを取得することになります。

var infowindow = new google.maps.InfoWindow({
   maxWidth: 10
});

var arrMarkers = [];

function addMarker(data) {
   var marker = new google.maps.Marker({
       position: new google.maps.LatLng(data.lattitude, data.longitude),
       map: map,
       title: data.address
   });

    arrMarkers.push(marker);

   var contentString = '<div id="content">'+
       '<div id="siteNotice">'+
       '</div>'+
       '<h2 id="firstHeading" class="firstHeading">'+data.name+'</h2>'+
       '<div id="bodyContent">'+
       '<p>'+data.address+'</p>'+
       '<p></p>'+
       '<p>Do You Want to change search location</p>'+
       '<input name="yes" id="yes" type="button" class="btn-common" value="Yes"/>'+
       '</div>'+
       '</div>';                                                   


    // add an event listener for this marker
    bindInfoWindow(marker, map, infowindow, contentString);   
}


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

function clickLink(ID) {
    google.maps.event.trigger(arrMarkers[ID], 'click');
}

サイドバー リンクの HTML は次のようになります。

<a href="javascript:clickLink(0); return false;">Link 1</a><br>
<a href="javascript:clickLink(1); return false;">Link 2</a><br>
...
于 2012-10-18T12:25:30.137 に答える
0

関数クロージャ (基本的に createMarker 関数の使用を伴う) を使用するもう 1 つのオプションは、情報ウィンドウの内容をマーカーのプロパティに保存することです。単一の情報ウィンドウを使用するのが最も簡単です。ペーストビンに十分なコンテキストを提供していないため、それを行う実際の例を提供できません。

関数クロージャーを使用して情報ウィンドウのコンテンツをマーカーに関連付け、単一の情報ウィンドウを持っている例を次に示します (Mike Williams の v2 チュートリアルから翻訳)。

http://www.geocodezip.com/v3_MW_example_map3.html

Mike Williams による関数クロージャの説明

関数クロージャーを使用しない例を次に示します (情報ウィンドウの内容をマーカー オブジェクトのプロパティに格納します)。

http://www.geocodezip.com/v3_MW_example_map3_noclosure.html

于 2012-10-18T12:55:36.423 に答える