2010-10-16 6 views
3

Je remarque que l'événement closeclick sur InfoWindow est appelé avant l'affichage d'InfoWindow dans Google Maps V3. Quelqu'un d'autre a-t-il vu cela? Punaise? Mon incompréhension du design?Événement de fermeture de session InfoWindow dans GoogleMaps V3 ayant été déclenché trop tôt?

Prenons l'exemple simple:

<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> 

Si vous exécutez cet exemple, FermerCliquer sera appelée avant l'affichage du InfoWindow, et non après sa création et après avoir appuyé sur le bouton « x » dans le coin supérieur droit coin de la bulle d'InfoWindow. Est-ce que c'est un bug (le leur ou le mien) ou est-ce que je ne comprends pas le design/l'utilisation?

Environnement: Windows Vista (32 bits), Firefox 3.6.10

+0

N'hésitez pas à copier ce qui précède localement et essayez par vous-même. – sanderb

+0

cher OP, si vous avez un moment s'il vous plaît upvote et accepter une réponse de la ci-dessous .. – Jonno

Répondre

9

vous Deviner pourriez avoir résolu vous déjà, mais pour d'autres avec le même problème. Essayez de passer la fonction comme référence à la place. Ainsi, au lieu de cela:

google.maps.event.addListener(infoW, 'closeclick', closeMarker()); 

Faites ceci:

google.maps.event.addListener(infoW, 'closeclick', closeMarker); 

Notez que votre code ressemble à ceci:

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

Mais le function(event) anonyme est un cas particulier où il est "permis" à utiliser() après le nom de la fonction.

Questions connexes