Mapplace.js 谷歌地图不会显示在引导选项卡上

Posted

技术标签:

【中文标题】Mapplace.js 谷歌地图不会显示在引导选项卡上【英文标题】:Maplace.js Google Map wont display on the bootstrap tab 【发布时间】:2017-08-12 06:03:51 【问题描述】:

我已经多次搜索我的问题的答案,但我得到的所有答案都没有帮助。

这里是场景。我在 mysql db 中有带 lat/long 的字段数据。我通过 php 使用 Jquery Ajax 查询数据库。通过单击主菜单中的 ERF 来显示结果数据,然后在两个 Bootstrap 选项卡中显示数据。一个选项卡以表格形式显示数据,另一个选项卡显示地图。请参阅下面的代码。

我的问题是,地图没有显示。事实上,地图选项卡根本不起作用。有人可以帮忙吗?

我使用 Bootstrap、JQuery 和 AJAX。

我从控制台收到此错误:“InvalidValueError: setMap: not an instance of Map; and not an instance of StreetViewPanorama”。不知道这是什么意思?

	<script>
		function displayErfsTable(erfArray) 
			$("#erfTable").append("<thead>");
				$("#erfTable").append("<tr>");
				$("#erfTable").append("<th>ERF No</th>");
				$("#erfTable").append("<th>area Name</th>");
				$("#erfTable").append("<th>lat</th>");
				$("#erfTable").append("<th>long</th>");	
				$("#erfTable").append("</tr>");	
			$("#erfTable").append("</thead>");
		    // Display each row in the ERFs Table 
		    for( i = 0; i < erfArray.length; i++ ) 
	  				var  erfRow = erfArray[i];
	  			$("#erfTable").append("<tr>");
			    	$("#erfTable").append("<td> " + erfRow['erf_no'] + " </td>");
			    	$("#erfTable").append("<td> " + erfRow['an'] + " </td>");
			    	$("#erfTable").append("<td> " + erfRow['latitude'] + " </td>");    	    	
			    	$("#erfTable").append("<td> " + erfRow['longitude'] + " </td>");    	
				$("#erfTable").append("</tr>");
			
			//
			$("#erfTable").append("<thead>");
				$("#erfTable").append("<tr>");
					$("#erfTable").append("<th>ERF No</th>");
					$("#erfTable").append("<th>area Name</th>");
					$("#erfTable").append("<th>lat</th>");
					$("#erfTable").append("<th>long</th>");	
				$("#erfTable").append("</tr>");	
			$("#erfTable").append("</thead>");	
		

		function displayErfsMap(erfArray) 
			$(function() 
				debugger;
				//console.log(map);
			    new Maplace(
			            map_div:'#map_canvas',
			            show_markers: false,
			            locations:[
			                lat: -31.069914,
			                lon: 28.35298,
			                html:'ERF1',
			                zoom:16
			            ]
			        ).Load();   
			);
		
	</script>
  
  	<script type="text/javascript">
		var i;
		$(document).ready(function() 
			$("#id_erf_main_menu").click(function (e) 
				debugger;
				e.preventDefault();
				jQuery.ajax(
					type: "POST", // HTTP method POST or GET
					url: "jq_erf_dbquery.php", //Where to make Ajax calls
					dataType:"json", // Data type, HTML, json etc.
					//data:myData, //Form variables
					success:function(erfArray)
						//Display ERFS Table
						displayErfsTable(erfArray);
						//console.log(erfArray);
						displayErfsMap(erfArray);
					,
				);
			);
		);	
	</script>
	<style>
		#mapcanvas 
		    width: 100%; 
		    height: 500px;
		
	</style>
<body>
	<div id="main_menu">
		<nav class="navbar navbar-default" style="min-height: 0;">
			<!-- Main Menu -->
			<ul class="nav nav-pills">
				<li class="active"><a data-toggle="tab" href="#municipalities">Municipalities</a></li>
				<li><a data-toggle="tab" href="#contracotrs">Contractors</a></li>
				<li><a data-toggle="tab" href="#fws">Field Workers</a></li>
				<li><a data-toggle="tab" href="#devices">Devices</a></li>
				<li><a data-toggle="tab" href="#erfs" id="id_erf_main_menu">ERFs</a></li>
				<li><a data-toggle="tab" href="#wos">Works Orders</a></li>
				<li><a data-toggle="tab" href="#dashboard">Dashboard</a></li>
				<li><a data-toggle="tab" href="#assets">Assets</a></li>
			</ul>
		</nav><!-- Main Menu --> 
	</div>

	<div class="tab-content">
		<div id="municipalities" class="tab-pane fade in active">
			<p>Municipalities Windows</p>
		</div>
		<div id="contracotrs" class="tab-pane fade">
			<p>Contractors Windows</p>
		</div>
		<div id="fws" class="tab-pane fade">
			<p>Field Workers Windows</p>
		</div>
		<div id="devices" class="tab-pane fade">
			<p>Devices Windows</p>
		</div>
		<div id="wos" class="tab-pane fade ">
			<p>WOs  goes here.</p>
		</div>
		<div id="dashboard" class="tab-pane fade">
			<p>Dashboard data displays here.</p>
		</div>
		<div id="assets" class="tab-pane fade">
			<p>Assets data displays here.</p>
		</div>				
		<div id="erfs" class="tab-pane fade" >
			<ul class="nav nav-tabs" id="erfTab">
			  <li class="active"><a href="#tab1">ERF Table</a></li>
			  <li><a href="#tab2">ERF Map</a></li>
			</ul>
			<div class="tab-content">
			  	<div class="tab-pane active" id="tab1">
			  	<p> ERF Table tab </p>
 	          		<table id="erfTable" class="table table-striped" >
 	          		</table>
			  	</div>
				<div class="tab-pane" id="tab2">
				<p> ERF Map tab </p>
				<div id="mapcanvas"></div>						
			</div>						
		</div>
	</div>

【问题讨论】:

【参考方案1】:

好的,我找到了答案。事实上,在一些回复中早先提供了解决方案。只是看起来不太对。我很抱歉。

我只需要在

中包含“data-toggle="tab" 。见下文

------------------------------------------------------------------
<ul class="nav nav-tabs" data-tabs="tabs" id="erfTab">
    <li class="active"><a href="#tab1" data-toggle="tab">ERF Table</a></li>
    <li><a href="#tab2" data-toggle="tab">ERF Map</a></li>
</ul>
------------------------------------------------------------------

我现在的新问题是,Mapplace 谷歌地图没有加载。我已经包含了“maplace.min.js”文件,并且可以在开发者控制台中看到它被访问了。但地图仍未加载。

有人可以帮我试一下吗?

【讨论】:

【参考方案2】:

好的,伙计们。我再次找到了 Mapplace Google Map not loading 的答案。

这与 div 地图容器有关。我已将我的地图容器 div 命名为“mapcanvas”。出于某种原因,这就是问题所在。我将 div 名称更改为 Maplace.js 中使用的默认名称(“gmap”),然后它突然起作用了。

令人惊讶的是,当我改回“mapcanvas”时,它继续工作。

有人可以解释一下吗?

现在的新问题是,地图绘制不正确且未居中。我现在必须解决这个问题。走吧……

【讨论】:

以上是关于Mapplace.js 谷歌地图不会显示在引导选项卡上的主要内容,如果未能解决你的问题,请参考以下文章

多个 Google 地图和引导选项卡仅在窗口调整大小时呈现

带有 Bootstrap 的谷歌地图没有响应

谷歌地图标记不会显示(jQuery)

谷歌地图不会显示在 Phonegap iOS 应用程序中

谷歌地图未在 js 选项卡中加载

Android 谷歌地图标记禁用导航选项