Событие закрытия InfoWindow в GoogleMaps V3 происходит слишком рано? - PullRequest
3 голосов
/ 16 октября 2010

Я замечаю, что событие closeclick в InfoWindow вызывается до отображения InfoWindow в Google Maps V3.Кто-нибудь еще видел это?Ошибка?Мое недопонимание дизайна?

Рассмотрим простой пример:

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

Если вы запустите этот пример, closeclick будет вызываться до отображения окна InfoWindow, а не после его создания и нажатиякнопка «х» в верхнем правом углу окна InfoWindow.Это ошибка (их или моя) или я неправильно понимаю дизайн / использование?

Среда: Windows Vista (32-разрядная), Firefox 3.6.10

1 Ответ

9 голосов
/ 13 мая 2011

Думаю, вы уже решили это сами, но для других с такой же проблемой.Попробуйте вместо этого передать функцию в качестве ссылки.Поэтому вместо этого:

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

Но аноним function(event) являетсяособый случай, когда «имя» разрешено использовать () после имени функции.

...