4

マップにマーカーがありません。マップをクリックすると、情報ウィンドウがポップアップ表示され、緯度/経度が 5 dp までの 10 進数と度分秒で表示されます。開いているウィンドウは、新しいクリックに応答する前に常に閉じられます。位置は position: latLng で指定されますが、情報ウィンドウは常に左上にあります。私はこれに何日も費やしましたが、何かが足りないと感じています。以下のコード スニペット。何か案は?

google.maps.event.addListener(map, 'click', function (event) {
    var lat = event.latLng.lat(),
        lng = event.latLng.lng(),
        latLng = event.latLng,
        strHtml;
    //
    // strHtml build code omitted but succesfully uses lat and lng to produce
    // e.g. Latitude : 51.72229 N (51° 43' 20'' N)
    //      Longitude : 1.45827 E (1° 27' 30'' E)
    //
    // If an infowindow is open, then close it
    if (openedInfoWindow != null) openedInfoWindow.close();
    // latLng monitored to check it is there before use in infowindow
    alert(latLng); // returns correct values which position then ignores!
    var infoWindow = new google.maps.InfoWindow({
        position: latLng, 
        content: strHtml,
        maxWidth: 420
    });
    // Open infoWindow
    infoWindow.open(map,this);
    // Remember the opened window
    openedInfoWindow = infoWindow;
    // Close it if X box clicked
    google.maps.event.addListener(infoWindow, 'closeclick', function() {
    openedInfoWindow = null; 
    });    
});
4

2 に答える 2

5

このコードにはいくつかの問題があります。情報ウィンドウのopenメソッドの 2 番目のパラメーターはMVCObject 、コア API でのみMarker使用できるクラスである必要があります。アンカーとして使用できます。毎回 infowindow 変数を null に設定して、新しい infowindow オブジェクトを作成する必要はありません。必要な情報ウィンドウは 1 つだけで、その内容と位置を変更できます。この方法では、一度に表示される情報ウィンドウは 1 つだけです。

これは実際の例のフィドルです: http://jsfiddle.net/bryan_weaver/z3Cdg/

関連コード:

google.maps.event.addListener(map, 'click', function (evt) {
       var content = "<div class='infowindow'>";
       content += "Latitude: " + evt.latLng.lat() + "<br/>";
       content += "Longitude: " + evt.latLng.lng() + "</div>";
       HandleInfoWindow(evt.latLng, content);
});

function HandleInfoWindow(latLng, content) {
    infoWindow.setContent(content);
    infoWindow.setPosition(latLng);
    infoWindow.open(map);
}
于 2013-10-29T15:17:20.573 に答える
4

の 2 番目の (オプションの) 引数は、位置プロパティを公開するinfoWindow.open()であることが期待されます。MVCObject

コールバックのthis引数はgoogle.maps.Map-Instance(map) を参照します。これは ですが、 -propertyMVCObjectはありません。position

から 2 番目の引数を削除しますinfoWindow.open(map,this);

于 2013-10-29T14:47:13.337 に答える