1

ドラッグしているマーカーの情報ウィンドウを閉じることができません。ご協力いただきありがとうございます

function mapClick(event) {

        createLocationMarker(event.latLng);

}
function createLocationMarker(location) {
    var clickedLocation = new google.maps.LatLng(location)
    var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});

    gMap2.setCenter(location);
    displayMarkerPosition(gMarker);

     google.maps.event.addListener(gMarker, "dragstart", closeMapInfoWindow );
     google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}

function closeMapInfoWindow() {infowindow.close(); }

function displayMarkerPosition(gMarker) {
    var message = "my message";
    var infowindow = new google.maps.InfoWindow(
    {   content : message,
    });

    infowindow.open(gMap2,gMarker); 
}
4

1 に答える 1

3

はい、infowindowプライベートスコープで定義しますが、そのスコープ外でアクセスします。これをスクリプトの先頭に追加します。

var infowindow;

そして、コンストラクター行から「var」を削除します。

infowindow = new google.maps.InfoWindow(

(サンプルからの)完成したコードは次のようになります

もう少し背景

で変数を定義するとvar、そのスコープに関連付けられます。関数で定義した場合、その関数とその関数で定義された他の関数のみが変数にアクセスできます。それを渡す他の唯一の方法は、関数のパラメーターとしてです。

更新複数の情報ウィンドウを容易にするためにこれを行います。var元の宣言に戻って、その関数のスコープを維持していることに注意してください。次に、後で使用するためにオブジェクトへの参照を返します。

function mapClick(event) {
    createLocationMarker(event.latLng);
}
function createLocationMarker(location) {
    var clickedLocation = new google.maps.LatLng(location)
    var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});

    gMap2.setCenter(location);
    // Store reference to info window
    var info = displayMarkerPosition(gMarker);

    google.maps.event.addListener(gMarker, "dragstart", function(){ info.close } );
    google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}

function displayMarkerPosition(gMarker) {
    var message = "my message";
    var infowindow = new google.maps.InfoWindow(
      {   content : message }
    );

    infowindow.open(gMap2,gMarker); 
    return infowindow; // Return the reference to the infowindow
}
于 2010-01-11T01:28:12.980 に答える