简体   繁体   English

Google Map Event Listener似乎不起作用

[英]Google Map Event Listener does not seem to work

I have used the places map to search for a location and when user click on the marker i have created a Listener to zoom the map, but does not seem to work. 我已经使用地方地图搜索位置,并且当用户单击标记时,我创建了一个侦听器来缩放地图,但似乎无法正常工作。

I tried 我试过了

<script>
    function initialize() {

      var markers = [];
      var map = new google.maps.Map(document.getElementById('map-canvas'), {
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });

      var defaultBounds = new google.maps.LatLngBounds(
          new google.maps.LatLng(-33.8902, 151.1759),
          new google.maps.LatLng(-33.8474, 151.2631));
      map.fitBounds(defaultBounds);

      // Create the search box and link it to the UI element.
      var input = /** @type {HTMLInputElement} */(
          document.getElementById('pac-input'));
      map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

      var searchBox = new google.maps.places.SearchBox(
        /** @type {HTMLInputElement} */(input));

      // [START region_getplaces]
      // Listen for the event fired when the user selects an item from the
      // pick list. Retrieve the matching places for that item.
      google.maps.event.addListener(searchBox, 'places_changed', function() {
        var places = searchBox.getPlaces();

        for (var i = 0, marker; marker = markers[i]; i++) {
          marker.setMap(null);
        }

        // For each place, get the icon, place name, and location.
        markers = [];
        var bounds = new google.maps.LatLngBounds();
        for (var i = 0, place; place = places[i]; i++) {
          var image = {
            url: place.icon,
            size: new google.maps.Size(71, 71),
            origin: new google.maps.Point(0, 0),
            anchor: new google.maps.Point(17, 34),
            scaledSize: new google.maps.Size(25, 25)
          };

          // Create a marker for each place.
          var marker = new google.maps.Marker({
            map: map,
            icon: image,
            title: place.name,
            position: place.geometry.location
          });

          markers.push(marker);

          bounds.extend(place.geometry.location);
        }

        map.fitBounds(bounds);
      });
      // [END region_getplaces]

      // Bias the SearchBox results towards places that are within the bounds of the
      // current map's viewport.
      google.maps.event.addListener(map, 'bounds_changed', function() {
        var bounds = map.getBounds();
        searchBox.setBounds(bounds);
      });

      google.maps.event.addListener(marker, 'click', function () {
        map.setZoom(13);
        map.setCenter(marker.getPosition());
      });
    }
    google.maps.event.addDomListener(window, 'load', initialize);
</script>

It did not seem to work, any suggestions? 它似乎没有用,有什么建议吗?

You are creating several markers in for loop of event listener google.maps.event.addListener(searchBox, 'places_changed', function() {...} . But event listener for marker is set outside of it. 您正在事件侦听器google.maps.event.addListener(searchBox, 'places_changed', function() {...} for循环中创建多个标记。但是标记的事件侦听器已在其外部设置。

It should be moved to place after marker creation: 创建标记后,应将其移至适当位置:

        // Create a marker for each place.
        var marker = new google.maps.Marker({
            map: map,
            icon: image,
            title: place.name,
            position: place.geometry.location
        });

        markers.push(marker);

        google.maps.event.addListener(marker, 'click', function () {
            map.setZoom(13);
            map.setCenter(marker.getPosition());
        });

        bounds.extend(place.geometry.location);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM