【问题标题】:Can't get infowindow to appear on Google Maps V3无法让信息窗口出现在 Google 地图 V3 上
【发布时间】:2014-03-11 06:40:15
【问题描述】:

我是 javascript 编程新手,正在尝试使用 Google Maps V3 API。

按照 Google 的示例,我可以添加一个标记,并在每次更新窗口时让它移动到中心。但是,我希望在单击标记时添加一个信息窗口,这似乎不起作用。我尝试添加一些其他功能来测试是否触发了标记点击事件。这确实奏效了,所以我相信我创建信息窗口的方式有问题。

var map;

function initialize() {
  var bboxstr;

  var mapOptions = {
    zoom: 8,
    center: new google.maps.LatLng(-34.397, 150.644)
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

  var myMarker = new google.maps.Marker({
    position: map.getCenter(),
    map: map
  });

  google.maps.event.addListener(map, "click", function(event) {
    addMarker(event.latLng);
  });

  google.maps.event.addListener(map, "dragend", function(event) {
    var center = map.getCenter();
    myMarker.setPosition(center);
    bboxstr = map.getBounds();
    alert("new center is " + center + " and new bbox is " + bboxstr);
  });

  var infowindow = new google.maps.InfoWindow({
      content: bboxstr
  });

  google.maps.event.addListener(myMarker, 'click', function() {
    infowindow.open(map,myMarker);
  });
}

google.maps.event.addDomListener(window, 'load', initialize);

我一直在使用我桌面上的 HTML 文件(我使用文本编辑器创建)对此进行测试。我试图将该示例移植到 jsfiddle,但似乎也无法使其正常工作。如果有人也可以帮助我,那就太好了.. :(

http://jsfiddle.net/himenohogosha/CL6cH/

更新:我能够在下面的帮助下显示信息窗口。我剩下的问题是,为什么信息窗口的内容没有更新?

【问题讨论】:

    标签: javascript google-maps-api-3 infowindow


    【解决方案1】:

    您的代码运行良好。仅以您的风格更改height:300px。您看不到地图,因为它没有定义高度。

    DEMO

    【讨论】:

    • 希望对您有所帮助;)如果您还好,请不要忘记“点赞”:)谢谢!
    【解决方案2】:

    您有两次包含 Google API:作为来自 jsfiddle 的外部资源和通过标签。

    地图没有显示,因为map-canvas的头部、身体和宽度没有样式规则。

    函数add-marker 未定义。已注释掉。

    信息窗口不显示,因为bboxstr 未定义。即使您稍后在事件侦听器中设置它。

    updated fiddle

    【讨论】:

    • 您的 cmets 在指出我的错误方面非常有帮助。非常感激!不过我想知道,为什么 bboxstr 在 dragend 事件期间没有更新?
    • 更具体地说,infowindow 内容设置为bboxstrbboxstr 在事件触发期间得到更新。为什么信息窗口的内容也没有更新?
    • 因为 infowindow 内容对bboxstr 更新一无所知。如果您想更新该事件侦听器中的内容,您必须调用infowindow.setContent()。如果你输入bboxstr 你会得到错误因为map.getBounds() 返回对象而setContent() 需要一个字符串。 infowindowbboxstr 是完全分离的变量。 infowindow 内部没有对bboxstr 的任何引用。因此,对于bboxstr 的每次更改,您都必须调用setContent() 来更改内容字符串。
    • 安托是对的。 bboxstr 是对象。请参阅jsfiddle 中的示例。您可以在控制台 (F12) 中看到 centerbboxstr 变量
    • 感谢@AntoJurković 和@ReneKorss。在您的帮助和示例的帮助下,我能够让我的代码按预期工作!我结束了使用infowindow.setContent() 来更新信息窗口。我还发现我可以使用bboxstr.toString() 轻松将其设置为信息窗口的内容。
    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2014-05-14
    • 1970-01-01
    • 2016-04-04
    • 2012-08-30
    • 2013-12-16
    相关资源
    最近更新 更多