【问题标题】:Issue toggle on/off with infowindow使用信息窗口打开/关闭问题
【发布时间】:2015-04-29 06:52:01
【问题描述】:

今天我看到一个关于在同一个按钮中打开/关闭的答案,我决定尝试使用。

我想要的是点击标记,然后一个信息窗口出现在我的地图中,但它不起作用。

JSFiddle simple marker with infowindow

JSFiddle toogle on/off but no infowindow

当我尝试像这样加入(使用 infowindow 工具)时:

google.maps.event.addDomListener(buttonCarrosUI, 'click', function() {
  if(marker && marker.setMap){
      if (marker.getMap() != null)
          marker.setMap(null);
     else marker.setMap(map_canvas);
  }else{
      var myLatLng;
      var title = marker.title;
      $.each( data.markers, function(i, marker) {
          myLatLng = new google.maps.LatLng(marker.latitude, marker.longitude);
      });
      var infowindow = new google.maps.InfoWindow({
          content: title,
      });
          marker = new google.maps.Marker({
              position: myLatLng,
              map: map_canvas,  
              icon: image,
              title: title
          });
          google.maps.event.addListener(marker, 'click', function() {
              infowindow.open(map_canvas,marker);
          });
   }
});

我遇到了这个问题

TypeError:标记未定义

var title = marker.title;

如果有人可以帮助我,我将非常感激,谢谢。

【问题讨论】:

  • 产生该错误的代码在哪里?
  • 错误是当我尝试加入两个代码时,如灰色部分
  • 那有一个不同的错误:Uncaught SyntaxError: Unexpected end of input
  • Firebug 告诉我标记未定义大声笑

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


【解决方案1】:

您正在 $.each 之外创建标记。除非您希望一次打开多个信息窗口,否则最好创建一个全局信息窗口并重复使用它。此外,您正在覆盖 $.each 中的“标记”变量。请注意,这不适用于多个标记。如果您有多个标记,则需要保留对数组中标记的引用(此代码来自的原始示例切换了一条折线)。下面的代码对我有用:

google.maps.event.addDomListener(buttonCarrosUI, 'click', function () {
    var data = JSON;
    var myLatLng;
    if (marker && marker.setMap) {
        if (marker.getMap() != null) marker.setMap(null);
        else marker.setMap(map_canvas);
    } else {
        $.each(data.markers, function (i, markerInfo) {
            myLatLng = new google.maps.LatLng(markerInfo.latitude, markerInfo.longitude);
            marker = new google.maps.Marker({
                position: myLatLng,
                map: map_canvas,
                title: markerInfo.title
            });
            google.maps.event.addListener(marker, 'click', function () {
                infowindow.setContent(marker.getTitle());
                infowindow.open(map_canvas, marker);
            });
        });

    }
});

working fiddle

【讨论】:

  • 谢谢@geocodezip!!但是让我再问一个问题,如果我想同时显示多个信息窗口,我需要做些什么来保留参考?
  • 如果你想一次显示和切换多个标记,你需要将它们的引用保存在一个数组中。如果您想一次打开多个信息窗口,则需要为每个标记创建一个。不仅如此,试着去做,如果你遇到麻烦再问一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
相关资源
最近更新 更多