在所选项目上使用Google Maps Javascript API信息窗口的正确方法

在所选项目上使用Google Maps Javascript API信息窗口的正确方法,javascript,jquery,google-maps,google-maps-api-3,Javascript,Jquery,Google Maps,Google Maps Api 3,在我的项目中,我使用GoogleMapsJavaScriptAPI更新一个包含所有标记的下拉框。目标是当用户选择其中一个时,在地图上用一个信息窗口显示最后一个。像这样 我的问题是,当我从列表中选择一个项目时,它不会在地图上显示好的项目,并且infowindow.setContent seam do也不起作用 我做错了什么 代码片段: 最后我找到了一个正确管理它的解决方案。我希望这能帮助其他和我有同样问题的人 请提供一份说明问题的报告。地图样式中有很多无关的代码,为什么要在下拉列表的处理程序中对地

在我的项目中,我使用GoogleMapsJavaScriptAPI更新一个包含所有标记的下拉框。目标是当用户选择其中一个时,在地图上用一个信息窗口显示最后一个。像这样

我的问题是,当我从列表中选择一个项目时,它不会在地图上显示好的项目,并且infowindow.setContent seam do也不起作用

我做错了什么

代码片段:


最后我找到了一个正确管理它的解决方案。我希望这能帮助其他和我有同样问题的人


请提供一份说明问题的报告。地图样式中有很多无关的代码,为什么要在下拉列表的处理程序中对地址进行地理编码?@geocodezip请停止使用downvote,这不是真正的感谢。我已通过删除样式清理了代码。我在下拉列表的处理程序中使用地理编码,因为我传递了map.makers for infowindow,然后在控制台中出现以下错误消息:InvalidValueError:setPosition:not a LatLng或LatlInTerral:in property lat:not a number
$('#markerlist').on('change', function() {
  var $data = $("#markerlist option:selected").text();
  $.each(map.markers, function() {
    for (var i = 0; i < $data.length; i++) {
      if (this.filter.menu.indexOf($data[i]) < 0) {
        doGeocoding(this.position, this.filter.urlSmoke);
        return;
      }
    }
  });
});

function doGeocoding(latLng, label) {  
  geocoder.geocode({'location': latLng}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      if (results[1]) { // use 2nd array item, a less-specific address
        infowindow.setContent(label);
      } else {
        infowindow.setContent('');
      }
    } else {
      infowindow.setContent('no data found');
    }
  });

  infowindow.setPosition(latLng);
  infowindow.open(map);
}
// Handle change status from Option HTML
$('#markerlist').on('change', function() {
  // get attribute data from option selected html
  var lat       = $(this).find(':selected').data('lat');
  var lng       = $(this).find(':selected').data('lng')
  var markerIdx = $(this).find(':selected').data('marker');
  var label = map.markers[markerIdx].filter.menu;
  // get marker from map array
  var setMarker = map.markers[markerIdx];
  // set nex latlng from option selected
  var latlng = new google.maps.LatLng(lat, lng);

  // set new infowindows from previous datas
  infowindow.setContent(label);
  infowindow.setPosition(latlng);
  infowindow.open(map, setMarker);      
})