【问题标题】:Google Maps change content of infowindow谷歌地图更改信息窗口的内容
【发布时间】:2015-10-08 06:29:06
【问题描述】:

我的谷歌地图中有一堆带有信息窗口的标记。 最初,我将内容设置为带有<input type="text" ...> 和提交按钮的内容。在提交按钮的onclick="return submitForm();" 上,我调用了一个函数,该函数应该更改它所做的信息窗口的内容。但是当我关闭信息窗口并再次打开它时,文本正在被重置。我怎样才能让它留下来? infowindow.setContent("This HTML content is being reset after reopening the infowindow");

infowindow.open(map, marker);

非常感谢!

_

编辑:

初始化:

function addCoordinate(lat, lon, text){
    var marker = new google.maps.Marker({
        position: (new google.maps.LatLng(lat, lon)),
        title: '#' + path.getLength(),
        map: map,
        icon: image3
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent('<input type="text" id="wpname" value="'+ name +'" style="width:200px"><input type="hidden" id="wplat" value="'+ lat +'"><input type="hidden" id="wplon" value="'+ lon +'"><input type="submit" value="OK" onclick="return submitForm();"><br>'+ text +'<br><a href="javascript:removeCoordinate('+lat+', '+lon+');">Remove</a>');
        infowindow.open(marker.get('map'), marker);
    });
}

要调用的函数:

function submitForm() {
    infowindow.setContent("This HTML content is being reset after reopening the infowindow");
    infowindow.open(map, marker);
}

每当我单击提交按钮时,内容应从表单更改为“此 HTML 内容正在重置 [...]”。当我关闭信息窗口并再次打开它时,应该仍然有消息“此 HTML 内容正在重置 [...]”。

现在它被设置回带有提交按钮的表单。

【问题讨论】:

  • “正在重置文本”是什么?需要有关错误状态的更多详细信息。
  • 初始化时到原文:google.maps.event.addListener(marker, 'click', function() { infowindow.setContent('original text'); infowindow.open(marker.get ('地图'), 标记); });
  • 发布重现您遇到的问题的代码的最小版本。你如何加载你的标记,等等。我们不知道,所以很难提供帮助。在此处阅读更多信息:How do I ask a good question?
  • 好的,见编辑。提前致谢!

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


【解决方案1】:

您必须以一种与单击的标记相关的方式存储内容。最好的方法是将其直接存储为标记的属性(并在submitForm 中更新此标记属性)

function initialize() {

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

    infowindow = new google.maps.InfoWindow;

  function addCoordinate(lat, lon, text) {
    var node = document.createElement('div'),
      marker = new goo.Marker({
        position: (new goo.LatLng(lat, lon)),

        map: map,
        content: node
      });
    node.innerHTML =
      '<input type="text" id="wpname" value="' + name + '" style="width:200px">' +
      '<input type="hidden" id="wplat" value="' + lat + '">' +
      '<input type="hidden" id="wplon" value="' + lon + '">' +
      '<input type="submit" value="OK" ><br>' + text +
      '<br><a href="#">Remove</a>';

    function submitForm() {
      marker.set('content', 'This marker has been stored');
      goo.event.trigger(marker, 'click')
    }

    function removeCoordinate() {
      marker.setMap(null);
    }

    goo.event.addDomListener(node.querySelector('input[type=submit]'), 'click', submitForm)
    goo.event.addDomListener(node.querySelector('a'), 'click', removeCoordinate)


    goo.event.addListener(marker, 'click', function() {
      infowindow.setContent(this.get('content'));
      infowindow.open(marker.get('map'), marker);
    });
  }
  goo.event.addListener(map, 'click', function(e) {
    addCoordinate(e.latLng.lat(), e.latLng.lng(), 'some text');
  });

  window['alert']('click on the map to add a marker')

}
google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map-canvas {
  height: 100%;
  margin: 0;
  padding: 0
}
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3"></script>

<div id="map-canvas"></div>

【讨论】:

  • 差不多吧!做了一些小的改动,但它可以工作 - 太好了,谢谢!
  • 我试图获取用户可编辑的 infowindow 的值。但无法使用 div。所以通过输入输入框,我设法得到了值。不过我没有使用按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2011-10-07
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
相关资源
最近更新 更多