【问题标题】:bootstrap modal dialog is missing google map embedded in it - why?引导模式对话框缺少嵌入其中的谷歌地图 - 为什么?
【发布时间】:2017-11-19 14:27:30
【问题描述】:

我的网页上有几个链接,每个链接都用不同的位置数据描述不同的地方。当用户点击任何链接时,我想展示一个嵌入了谷歌地图的模态引导对话框——当然,对于每个链接,显示的位置应该不同。

我有我的引导对话框的 html 代码:

<script src="https://code.jquery.com/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script async defer src="https://maps.googleapis.com/maps/api/js"></script>

<div class="modal fade" id="myMapModal">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h4 class="modal-title">Modal title</h4>

      </div>
      <div class="modal-body">
        <div class="container">
          <div class="row">
            <div id="map-canvas" class=""></div>
          </div>
        </div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
    <!-- /.modal-content -->
  </div>
  <!-- /.modal-dialog -->
</div>
<!-- /.modal -->

<script async defer src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY">
</script>

<script type='text/javascript'>
  var element = $(this);
  var map;

  function initialize(myCenter) {
    var marker = new google.maps.Marker({
      position: myCenter
    });

    var mapProp = {
      center: myCenter,
      zoom: 10,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById("map-canvas"), mapProp);
    marker.setMap(map);
  };
</script>

<script type='text/javascript'>
  $('#myMapModal').on('shown.bs.modal', function(e) {
    console.log("tutaj");
    var element = $(e.relatedTarget);
    var data = element.data("lat").split(',')
    initialize(new google.maps.LatLng(data[0], data[1]));
    google.maps.event.trigger(map, 'resize');
  });
</script>

<a href="#" data-lat="10, 20" data-toggle="modal" , data-target="#myMapModal">map</a>

<a href="#" data-lat="20, 30" data-toggle="modal" , data-target="#myMapModal">map2</a>

等等

但是,当用户点击这些链接中的任何一个时,会显示模式,但不包含任何谷歌地图。它看起来像这样:

并且开发人员的控制台不会显示任何警告或错误。

这里可能是什么情况?

【问题讨论】:

  • @MoshFeu 就在这里是您的代码 jsfiddle.net/suc56r0s/1 的小提琴,只需将密钥替换为您的即可。
  • @MuhammadOmerAslam 谢谢!
  • 没问题,我刚刚投票赞成你的答案
  • 谢谢☺你很善良..

标签: javascript jquery html twitter-bootstrap google-maps


【解决方案1】:

您应该为#map-canvas 设置尺寸,因为所有内容都使用position: absolute

工作示例:

var element = $(this);
var map;
function initialize(myCenter) {
  var marker = new google.maps.Marker({
    position: myCenter
  });

  var mapProp = {
    center: myCenter,
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  map = new google.maps.Map(document.getElementById("map-canvas"), mapProp);
  marker.setMap(map);
};

$('#myMapModal').on('shown.bs.modal', function(e) {
  console.log("tutaj");
  var element = $(e.relatedTarget);
  var data = element.data("lat").split(',')
  initialize(new google.maps.LatLng(data[0], data[1]));
  google.maps.event.trigger(map, 'resize');
});
#map-canvas {
  width: 100%;
  height: 500px;
}
<script src="https://code.jquery.com/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script async defer src="https://maps.googleapis.com/maps/api/js"></script>

<a href="#" data-lat="10, 20" data-toggle="modal" , data-target="#myMapModal">map</a>

<a href="#" data-lat="20, 30" data-toggle="modal" , data-target="#myMapModal">map2</a>

<div class="modal fade" id="myMapModal">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h4 class="modal-title">Modal title</h4>

      </div>
      <div class="modal-body">
        <div id="map-canvas" class=""></div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
    <!-- /.modal-content -->
  </div>
  <!-- /.modal-dialog -->
</div>
<!-- /.modal -->

【讨论】:

  • 我的荣幸?祝你好运?
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多