【问题标题】:InfoWindow doesn't want to close with Google Maps Api V3InfoWindow 不想用 Google Maps Api V3 关闭
【发布时间】:2011-01-03 14:36:49
【问题描述】:

我无法关闭我正在拖动的标记的信息窗口,知道吗? 感谢您的帮助

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); 
}

【问题讨论】:

    标签: javascript google-maps google-maps-api-3


    【解决方案1】:

    是的,您在私有范围内定义 infowindow,但在该范围之外访问它。将此添加到脚本的开头:

    var infowindow;
    

    并从您的构造函数行中删除“var”:

    infowindow = new google.maps.InfoWindow(
    

    完成的代码(来自您的示例)将是look like this

    多一点背景

    当您使用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
    }
    

    【讨论】:

    • 快速,克莱尔等!谢谢美人道格 :)
    • @Shipow Avec plaisir
    • "传递它的唯一其他方法是作为函数中的参数。"我希望有多个标记,所以定义了多个信息窗口,我应该在哪里使用参数来访问实例?谢谢你的时间
    • @Shipow 我更新了我的答案来处理你的问题。让我知道这是否适合你!
    • 它的工作!再次感谢你拯救了我的夜晚 :) info.close()
    猜你喜欢
    • 2012-01-06
    • 2011-10-10
    • 1970-01-01
    • 2010-12-06
    • 2011-11-06
    • 2011-02-11
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多