Javascript 谷歌地图鼠标输出仅适用于上一个信息窗口

Javascript 谷歌地图鼠标输出仅适用于上一个信息窗口,javascript,google-maps,google-maps-api-3,infowindow,Javascript,Google Maps,Google Maps Api 3,Infowindow,.你好,我有个随机的问题,我还没弄明白。我有一个带有标记的地图,当你将鼠标悬停在信息窗口上时,它会显示信息窗口,当你将鼠标移开时,信息窗口应该关闭。出于某种原因,第二部分(在mouseout上关闭infowindow)只应用于最后一个标记 如果有人能向我解释我哪里出了问题,以及如何修复我的代码,以便当用户将鼠标移离标记时,所有信息窗口都将关闭,我将不胜感激!谢谢 这是我的设置标记代码片段 function setMarkers(map, locations) { for (var i

.你好,我有个随机的问题,我还没弄明白。我有一个带有标记的地图,当你将鼠标悬停在信息窗口上时,它会显示信息窗口,当你将鼠标移开时,信息窗口应该关闭。出于某种原因,第二部分(在mouseout上关闭infowindow)只应用于最后一个标记

如果有人能向我解释我哪里出了问题,以及如何修复我的代码,以便当用户将鼠标移离标记时,所有信息窗口都将关闭,我将不胜感激!谢谢

这是我的设置标记代码片段

function setMarkers(map, locations) {

    for (var i = 0; i < locations.length; i++) {
        var item = locations[i];

        var myLatLng = new google.maps.LatLng(item[1], item[2]);

        var address1 = item[5];

        var marker = new google.maps.Marker({
            position: myLatLng,
            map: map,
        });

        var content = address;

        var infowindow = new google.maps.InfoWindow()

        google.maps.event.addListener(marker, 'mouseover', (function (marker, content, infowindow) {
            return function () {
                infowindow.setContent(content);
                infowindow.open(map, marker);
            };
        })(marker, content, infowindow));

        google.maps.event.addListener(marker, 'mouseout', function () {
            infowindow.close();
        });
    }

}

google.maps.event.addDomListener(window, 'load', initialize);
功能设置标记(地图、位置){
对于(变量i=0;i
您没有得到mouseout处理程序的函数闭包,但是您得到的是mouseover处理程序的函数闭包。要解决此问题,请更改:

function setMarkers(map, locations) {

      for (var i=0; i < locations.length; i++){
        var item   = locations[i];

        var myLatLng    = new google.maps.LatLng(item[1], item[2]);

        var address1    = item[5];

        var marker = new google.maps.Marker({
          position: myLatLng,
          map: map,
        });

        var content = address;

       var infowindow = new google.maps.InfoWindow()

      google.maps.event.addListener(marker,'mouseover', (function(marker,content,infowindow){ 
        return function() {
           infowindow.setContent(content);
           infowindow.open(map,marker);
        };
    })(marker,content,infowindow)); 

       google.maps.event.addListener(marker, 'mouseout', function(){
          infowindow.close();
       });
      }

    }  

google.maps.event.addDomListener(window, 'load', initialize);


太棒了!成功了,谢谢!闭包的作用是什么?我的意思是为什么有必要这样做?作为旁注:这个片段是一个很好的例子,说明了为什么我不会在infowindows中使用mouseover/mouseout。由于API调整了地图的居中,因此信息窗口可以完全显示在地图画布区域内,当您将标记悬停在靠近顶部边缘的位置时,您会得到
mouseover->show->center->mouseout->hide
的效果,我觉得这非常令人不安。当然,也可以通过点击来居中,但信息窗口保持打开状态,这让我在用户体验方面感觉好多了。
function setMarkers(map, locations) {

      for (var i=0; i < locations.length; i++){
        var item   = locations[i];

        var myLatLng    = new google.maps.LatLng(item[1], item[2]);

        var address    = item[5];

        var marker = new google.maps.Marker({
          position: myLatLng,
          map: map,
        });

        var content = address;

       var infowindow = new google.maps.InfoWindow()

      google.maps.event.addListener(marker,'mouseover', (function(marker,content,infowindow){ 
        return function() {
           infowindow.setContent(content);
           infowindow.open(map,marker);
        };
    })(marker,content,infowindow)); 
      google.maps.event.addListener(marker, 'mouseout', (function(marker,content,infowindow){ 
        return function() {
           infowindow.close();
        };
    })(marker,content,infowindow)); 

    }  
}
google.maps.event.addDomListener(window, 'load', initialize);