问题描述
||
我的jQuery应用程序中有两个选项卡。我想在两个标签中都使用Google Maps。我为下面的代码所示的每个选项卡添加了脚本和两个
<div>
标记。
第一个标签:
<div class=\"map_canvas\" style=\"width:100%; height:100%\"></div>
第二个标签:
<div class=\"map_canvas\" style=\"width:100%; height:100%\"></div>
Google Maps脚本:
function initialize()
{
var latlng = new google.maps.LatLng(11.6952727,77.5195312);
var myOptions = {
zoom: 8,center: latlng,mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementByClassName(\"map_canvas\"),myOptions);
}
----------Style for Google Map
.map_canvas { height: 100% }
#notes{ height: 100%;width:100% ; margin: 0px; padding: 0px } // Tab1 div tag,contains the First tab map Div Tag
#accordionWrapper{ height: 100%;width:100% ; margin: 0px; padding: 0px }// Tab2 div tag,contains the First tab map Div Tag
该地图未显示在两个选项卡中。这里有什么问题?
解决方法
如您在此处看到的,getElementByClassName()以树中出现的顺序返回找到的元素的实时NodeList:您应该遍历该nodeList并为每个元素创建一个新的映射,因为我认为gmaps API不允许您去做。
, 您将要使用
map_canvas
类来迭代元素,并为每个元素创建一个新的Map
实例,否则它将无法正常工作。
我想您正在为此使用jQuery UI Tabs?如果是这样,在将Google Maps加载到隐藏/不活动的标签中时,您很可能会遇到麻烦。正如评论中提到的那样,已经存在有关此问题的问题,并附带了解决该问题的答案。
无论如何,对您的代码进行以下更改/添加,您应该一切顺利!
的CSS
.ui-tabs .ui-tabs-hide {
position: absolute;
left: -10000px;
}
的JavaScript
$(function() {
// Container for maps
var maps = [],// Initial position
latlng = new google.maps.LatLng(11.6952727,77.5195312),// Options for Google Maps
mapOptions = {
zoom: 8,center: latlng,mapTypeId: google.maps.MapTypeId.ROADMAP
};
// Iterate the canvas elements and create a new map instance
$(\".map_canvas\").each(function(){
maps.push(new google.maps.Map(this,mapOptions));
});
// Trigger map resize on tab change
$(\'#id-of-tabs-container\').bind(\'tabsshow\',function(event,ui) {
google.maps.events.trigger(maps[ui.index],\'resize\');
});
});
将临时ID替换为元素的相应ID。