【问题标题】:multiple google maps in php loop with javascript and reference id带有javascript和参考ID的php循环中的多个谷歌地图
【发布时间】:2014-05-15 01:34:20
【问题描述】:

我尝试为 php 循环中的所有项目生成地图。

html:

<div class="container main-content">
  <!-- echo out the system feedback (error and success messages) -->
  <?php $this->renderFeedbackMessages(); ?>

  <div class="row">
    <div class="col-md-12">
        <h2>Event Overview</h2>
        <hr>
    </div>
  </div>
  <div class="row">
    <div class="col-md-8 col-md-pull-3">
        <?php
          if ($this->events) {
            foreach($this->events as $key => $value) {
            echo 
            '
              <div class="panel panel-default">
                <div class="panel-heading">
                  <h3 class="panel-title clearfix">
                  <b>' . htmlentities($value->event_name) . '</b> <div class="pull-right">' . htmlentities(date("d.m.y", $value->event_start_timestamp)) . ' - ' . htmlentities(date("d.m.y", $value->event_end_timestamp)) . '</div>
                  </h3>
                </div>
                <div class="panel-body">
                  <div id="map-canvas-' . htmlentities($value->event_id) . '" onload="renderMap(' . htmlentities($value->event_id) . ', ' . htmlentities($value->google_reference_id) . ')"></div>
                </div>
              </div>
            ';
            }
          }
        ?>
    </div>
  </div>
</div>
<!-- Google API Places -->
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>

js 脚本:

<script>
  function renderMap(event_id, google_reference_id) {
    var map_settings = <?php echo json_encode($this->events); ?>;

    var request = {
      reference: google_reference_id
    };

    var map = new google.maps.Map(document.getElementById('map-canvas-'+ event_id));
    var infowindow = new google.maps.InfoWindow();
    var service = new google.maps.places.PlacesService(map);

    service.getDetails(request, function(place, status) {
      if (status == google.maps.places.PlacesServiceStatus.OK) {

        var marker = new google.maps.Marker({
          map: map,
          position: place.geometry.location
        });

        if (place.geometry.viewport) {
          map.fitBounds(place.geometry.viewport);
        } else {
          map.setCenter(place.geometry.location);
          map.setZoom(15);
        }

        google.maps.event.addListener(marker, 'click', function() {
          infowindow.setContent(place.name);
          infowindow.open(map, this);
        });
      }
    });
  }
</script>

JS在同一个php文件中,为了更好理解,将其分开。是否有在 php 循环中生成地图的选项?唯一画布ID中的数字有问题吗?我有一个带有硬编码参考的工作解决方案,它只适用于没有数字的 document.getElementById 字符串。

【问题讨论】:

  • &lt;div id="map-canvas-' . htmlentities($value-&gt;event_id) . '" onload="renderMap(' . htmlentities($value-&gt;event_id) . ', ' . htmlentities($value-&gt;google_reference_id) . ')"&gt;&lt;/div&gt; 生成的 HTML 是什么样的?
  • &lt;div id="map-canvas-7" onload="renderMap(7, CqQBkQAAAJ2ovSaBhBgD-_zyhNR-T2ZzfIKlpbvRqXRYM4K2gsbKuHuGiqIYeJ8cJDmecpxjUTM28LZ3f1XmeUQXg9jxJt_sHmDmLPiWUMP9fUYUH7yyQMzeWM9GzBqRZgUs_g6ylpLBnJffvWbqTWA3ArwSeyJoSDNG7yHlsaauOW5vFIUB34l6i3Z7mDkZ0exhcQ_tMGTudsddisZ96eoT3qZfgjkSEC4k4UTdl9VEZpoK0FFewhcaFI_IrhKbeTIiOizX6HF-SkDbO8hR)"&gt;&lt;/div&gt;
  • 第二个参数是一个字符串,所以需要用引号括起来

标签: javascript php html google-maps-api-3


【解决方案1】:

ID 中的数字没有问题

div 没有onload-event,函数永远不会被调用。

可能的解决方案:

window.onload = function(){
  var maps = document.querySelectorAll('div[id^="map-canvas-"]');
  for(var i  =0; i < maps.length; ++i ){
    maps[i].onload();
  }
}

【讨论】:

  • 我得到了“未捕获的 SyntaxError: Unexpected token }”
  • google_reference_id 是一个字符串,必须用引号括起来
  • for 循环的右括号出现错误。但在 google 参考 ID 中添加了引号。
  • 你说得对,抱歉将引号更改为撇号。 html上没有地图。我试着做一个小提琴来检查谷歌地图和 getElementById 选择器是否有问题。
  • 只需检查jsfiddle.net/mnlfischer/7RrG9 与它不工作的号码。删除号码就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 2015-03-25
相关资源
最近更新 更多