23

我有这段代码,可以在其中显示和设置所有标记。如何使用此代码添加包含有关标记的一些信息的弹出窗口?我在文本上添加了“i”变量,但它在所有标记弹出窗口上设置了“test - 723”,其中 723 是“i”变量的最后一个值。怎么了?

for (var i = 0; i < arraylng.length-1; i++) {
  var marker = new google.maps.Marker({
    position: new google.maps.LatLng(arraylng[i], arraylat[i])
  });
  var infowindow = new google.maps.InfoWindow({
    content: " "
  });
  google.maps.event.addListener(marker, 'click', function() {
    infowindow.setContent('test: ' + i + '');
    infowindow.open(map, this);
  });
  markers.push(marker);
}
4

4 回答 4

41

首先,将循环条件更改为i < arraylng.length。现在它没有捕获数组的最后一个元素。

JavaScript 变量适用于函数范围,因此您需要为每个标记侦听器调用一个函数来创建正确的变量引用。您可以使用匿名函数,如此处所示,或定义一个函数来创建点击侦听器:

多个信息窗口:

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

很可能您不希望同时打开多个 InfoWindow,因为必须单击关闭很烦人x。然后您只需要一个 InfoWindow 对象,并在单击标记时设置内容:

单个信息窗口:

...
  var infowindow = new google.maps.InfoWindow();

  for (var i = 0; i < arraylng.length-1; i++) {
    var marker = new google.maps.Marker({
      position: new google.maps.LatLng(arraylng[i], arraylat[i]),
      map: map
    });

    makeInfoWindowEvent(map, infowindow, "test" + i, marker);

    markers.push(marker);
  }
}

function makeInfoWindowEvent(map, infowindow, contentString, marker) {
  google.maps.event.addListener(marker, 'click', function() {
    infowindow.setContent(contentString);
    infowindow.open(map, marker);
  });
}
于 2012-07-13T14:58:53.263 回答
2
var infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
              position: myLatLng,
              ....
              content: point[4]
          });
google.maps.event.addListener(marker, 'click', function() {
            infowindow.setContent(this.content);
            infowindow.open(map, this);
          });

循环内的代码。这对我来说非常有效。

于 2014-12-09T08:46:36.680 回答
2

这是您可以添加弹出内容的区域

var infowindow = new google.maps.InfoWindow({
                content: "Add your popup content here"
              });

这是为了显示您的弹出窗口

marker.addListener('click', function() {
          infowindow.open(map, marker);
        });

下面的代码显示了它是如何工作和使用的。

features.forEach(function(feature) {
          var infowindow = new google.maps.InfoWindow({
                    content: "Add your popup content here"
                  });
            var marker = new google.maps.Marker({
            position: new google.maps.LatLng(lat,long),
            icon: "image.png",
            /*icon: icons[feature.type].icon,*/
            title: "Title for marker",
            map: map
          });
          marker.addListener('click', function() {
          infowindow.open(map, marker);
        });
        });

于 2018-08-24T10:53:46.403 回答
0

那是因为该变量i没有在循环中使用,但是当单击标记时 - 然后 i 等于最后一个索引 + 1 ... 这addListener是异步的,而不是同步的。

删除infowindow.setContent('test: ' + i + '');并替换content: " "content: 'test: ' + i。这应该可以解决您的问题。

于 2012-07-13T08:52:25.310 回答