san*_*erb 3 javascript-events google-maps-api-3
我注意到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>
Run Code Online (Sandbox Code Playgroud)
如果运行此示例,将在显示InfoWindow之前调用closeclick,而不是在创建InfoWindow后按下InfoWindow气泡右上角的"x"按钮.这是一个错误(他们的或他的)或我是否误解了设计/使用?
环境:Windows Vista(32位),Firefox 3.6.10
猜猜你自己已经解决了这个问题,但对于那些有同样问题的人来说.尝试将该函数作为参考传递.所以不是这样的:
google.maps.event.addListener(infoW, 'closeclick', closeMarker());
Run Code Online (Sandbox Code Playgroud)
做这个:
google.maps.event.addListener(infoW, 'closeclick', closeMarker);
Run Code Online (Sandbox Code Playgroud)
请注意,您的代码类似于:
google.maps.event.addListener(map, 'click', function(event) {
placeMarker(event.latLng);
});
Run Code Online (Sandbox Code Playgroud)
但匿名function(event)是一个特殊情况,它允许在函数名后使用().
| 归档时间: |
|
| 查看次数: |
9150 次 |
| 最近记录: |