2010-01-11 115 views
1

我无法关闭我拖动的标记的信息窗口,有什么想法? 感谢您的帮助InfoWindow不想关闭Google Maps Api V3

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

回答

3

是的,你定义在私人范围infowindow,但访问该范围之外。添加到您的脚本的开头:

var infowindow; 

而且从你的构造线删除“变种”:

infowindow = new google.maps.InfoWindow(

完成的代码(从您的样品)将look like this

多一点背景

当你定义一个var一个变量,它是依赖于该范围。如果你在一个函数中定义它,只有该函数和其中定义的其他函数才能访问该变量。唯一的另一种传递方式是作为函数中的参数。

更新我会这样做,以促进多个infowindows。注意我已经恢复到原来的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 
} 
+0

Rapide,clair etprécis! Merci beaucoup Doug :) – Shipow 2010-01-11 01:33:26

+0

@Shipow Avec plaisir < - 我当然希望这意味着“我的乐趣”,如果不是,你会笑,因为我只会说英语! – 2010-01-11 01:37:35

+0

“传递它的唯一方法是作为函数中的参数。” 我希望有多个标记,所以定义了多个infowindow,我应该在哪里使用参数来访问实例? thx为你的时间 – Shipow 2010-01-11 01:53:15

相关问题