Javascript GoogleMaps V3中的InfoWindow closeclick事件被过早触发?

Javascript GoogleMaps V3中的InfoWindow closeclick事件被过早触发?,javascript,google-maps-api-3,dom-events,Javascript,Google Maps Api 3,Dom Events,我注意到InfoWindow上的closeclick事件在Google Maps V3中显示InfoWindow之前被调用。还有谁见过这个吗?缺陷我对设计的误解 考虑一个简单的例子: <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type="text

我注意到InfoWindow上的
closeclick
事件在Google Maps V3中显示InfoWindow之前被调用。还有谁见过这个吗?缺陷我对设计的误解

考虑一个简单的例子:

<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0px; padding: 0px }
      #map_canvas { 
                  }
    </style>
    
    <script type="text/javascript" 
            src="http://maps.google.com/maps/api/js?sensor=false"
            > 
    </script>
    
    <script type="text/javascript">
    
      function initialize() 
      {
        var newLatLng = new google.maps.LatLng(47.620513,-122.33963);
      
        var myOptions = { zoom: 12,
                          center: newLatLng,
                          draggingCursor: 'pointer',
                          draggableCursor: 'default',
                          mapTypeId: google.maps.MapTypeId.ROADMAP
                          };     
        
        map = new google.maps.Map(  document.getElementById("map_canvas"),
                                         myOptions);
        
        google.maps.event.addListener(map, 'click', function(event) {
          placeMarker(event.latLng);
          });
    }
    
    function placeMarker(location)
    {
      // Create new marker
      var marker = new google.maps.Marker({
          position: location, 
          map: map
      });

      map.panTo(location);
      
      markerWindow(marker);
    }
    
    // Prompt new event marker form
    function markerWindow(marker)
    {
      var infoHtml = "testing";
    
      var infoW = new google.maps.InfoWindow({});
      
      infoW.setContent(infoHtml);
      
      google.maps.event.addListener(infoW, 'closeclick', closeMarker());
      
      infoW.open(map, marker);
    }
    
    function closeMarker()
    {
      window.alert("closeclick fired");
    }
   
    </script>
  </head>
  <body onload='initialize()'>
  <div id="map_canvas" style="   position:absolute;
                                 width:400px; 
                                 height:400px;"
                                 >
       </div>
  </body>
</html>

html{高度:100%}
正文{高度:100%;边距:0px;填充:0px}
#地图{
}
函数初始化()
{
var newLatLng=newgoogle.maps.LatLng(47.620513,-122.33963);
var myOptions={zoom:12,
中心:纽拉廷,
拖动光标:“指针”,
DragableCursor:“默认值”,
mapTypeId:google.maps.mapTypeId.ROADMAP
};     
map=new google.maps.map(document.getElementById(“map_canvas”),
肌肽);
google.maps.event.addListener(映射,'click',函数(事件){
地点标记(事件标记);
});
}
功能位置标记(位置)
{
//创建新标记
var marker=new google.maps.marker({
位置:位置,,
地图:地图
});
panTo地图(位置);
markerWindow(marker);
}
//提示新事件标记窗体
函数标记窗口(标记器)
{
var infoHtml=“测试”;
var infoW=new google.maps.InfoWindow({});
setContent(infoHtml);
google.maps.event.addListener(infoW,'closeclick',closeMarker());
信息打开(地图、标记);
}
函数closeMarker()
{
window.alert(“closeclick-fired”);
}
如果运行此示例,将在显示信息窗口之前调用
closeclick
,而不是在创建信息窗口之后以及按下信息窗口气泡右上角的“x”按钮时调用。这是一个bug(他们的还是我的),还是我误解了设计/使用


环境:Windows Vista(32位)、Firefox 3.6.10

猜测如果不是其他人也有同样的问题,你自己可能已经解决了这个问题。尝试将函数作为引用传递。因此,与此相反:

google.maps.event.addListener(infoW, 'closeclick', closeMarker());
这样做:

google.maps.event.addListener(infoW, 'closeclick', closeMarker);
请注意,您的代码类似于:

google.maps.event.addListener(map, 'click', function(event) {
      placeMarker(event.latLng);
});

但是匿名
函数(事件)
是一种特殊情况,允许在函数名后使用()。

您也可以将侦听器添加到
信息窗口本身

下面是一个受Google Maps Javascript文档启发的示例:

let contentString=
'' +
'' +
"" +
“你好,世界!”+
'' +

“请随意在本地复制上述内容并亲自尝试。亲爱的OP,如果您有时间,请向上投票并接受下面的答案。”。。