Google Maps that do not work when placed on jQuery tabs is an issue that exists across the web. In my research, none of the solutions work yet. Hope someone here can help ...
This is a screenshot of the error in Firefox 10, Chrome 17, Safari 5.1.2, Opera 11.61. http://www.flickr.com/photos/75523633@N04/6932970713/
The error is missing in IE8 and intermittent in 9. In Firefox, it disappears when you open FireBug.
The site is in Wordpress 3.3.1, and the map is created / retrieved through the plugin. It doesn't seem to matter which map plugins I use; the error remains the same. Based on my research, this problem is a js / jQuery problem between tabs and the javascript Google Map API, not a Wordpress / plugin problem.
Here is my code. Right now, I'm using the wp-gmappity-easy-google-maps plugin for maps, but I also tried the full-google-map plugin. Both work fine behind tabs.
HTML:
// Header calls: <script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script> <script type='text/javascript' src='http://xxxxxxxxxx.com/wp-content/themes/zzzzzzzzzz/scripts/tabs.min.js'></script> // HTML Body: <div class="tabs_framed_container"> <ul class="tabs_framed"> <li><a href="#">Tab 1</a></li> <li><a href="#">Tab 2</a></li> <li><a href="#">Tab 3</a></li> <li><a href="#">Map Tab</a></li> <li><a href="#">Tab 3</a></li> </ul> <div class="tabs_framed_content"> <h2>Tab 1 Content</h2> </div> <div class="tabs_framed_content"> <h2>Tab 2 Content</h2> </div> <h2>Tab 3 Content</h2> </div> <div class="tabs_framed_content"> <div class="map_container"> <div style="width:900px;margin-left:auto;margin-right:auto;"> <div class="wpgmappity_container" id="wpgmappity-map-1" style="width:900px;height:400px;margin-left:auto;margin-right:auto;"></div> </div> <script type="text/javascript"> function wpgmappity_maps_loaded1() { var latlng = new google.maps.LatLng(42.4005322,-71.2750094); var options = { center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP, zoomControl : true, zoomControlOptions : { style: google.maps.ZoomControlStyle.SMALL, position: google.maps.ControlPosition.TOP_LEFT }, mapTypeControl : true, mapTypeControlOptions : { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.TOP_RIGHT }, scaleControl : true, scaleControlOptions : { position: google.maps.ControlPosition.TOP_LEFT }, streetViewControl : true, streetViewControlOptions : { position: google.maps.ControlPosition.TOP_LEFT }, panControl : false, zoom : 14 }; var wpgmappitymap1 = new google.maps.Map(document.getElementById('wpgmappity-map-1'), options); var point0 = new google.maps.LatLng(42.4005322,-71.2750093); var marker1_0 = new google.maps.Marker({ icon : 'http://xxxxxxxxxx.com/wp-content/themes/zzzzzzzzzz/images/mapmarker.png', position : point0, map : wpgmappitymap1 }); } jQuery(window).load(function() { wpgmappity_maps_loaded1(); }); </script> </div> </div> <div class="tabs_framed_content"> <h2>Tab 2 Content</h2> </div>
Here is the relevant CSS:
.tabs_framed{padding:0;margin:0;list-style-type:none;clear:left;height:25px;border-bottom:1px solid #E5E5E5;} .tabs_framed_container{margin-bottom:40px;} .tabs_framed a{ display:block; position:relative; background:#fafafa; border:1px solid #E5E5E5; padding:7px 30px; margin-right:2px; font-size:10px; text-decoration:none; text-transform:uppercase; letter-spacing:1px; line-height:10px; color:#777; opacity:1; -webkit-transition:all .5s ease; -moz-transition:all .5s ease; -o-transition:all .5s ease; transition:all .5s ease; } .tabs_framed a:hover{color:#20548B;text-decoration:none;background:#fff;} .tabs_framed a.current{color:#000;cursor:default;border-bottom:1px solid #fff;background:#fff;} .tabs_framed li,{padding:0;margin:0;list-style-type:none;float:left;} .tabs_framed_content{display:none;background-color:#fff;border:1px solid #E5E5E5;border-width:0 1px 1px 1px;padding:30px 30px 15px 30px;} div.wpgmappity_container img { background-position: 0% 0%; background-color: none !important; max-width: none !important; background-image: none !important; background-repeat: repeat !important; background-attachment: scroll !important; }
Here is the link to the file that controls my tabs: http://themes.mysitemyway.com/awake/wp-content/themes/awake/lib/scripts/tabs.min.js
flowplayer.org/tools/forum/25/79274 is one of the solutions I found (scroll down). However, checkResize and resizeMap no longer work (see api Link to code.google.com/apis/maps/documentation/javascript/reference.html#Map, scroll down a little to "Events" and find google.maps.event. Trigger ( map, 'resize'), which is apparently the replacement code). www.raymondcamden.com/index.cfm/2009/6/5/jQuery-Tabs-and-Google-Maps is another old entry.
I saw this suggestion:
jQuery(document).ready(function(){ jQuery('.tabs_container').bind('tabsshow', function(event, ui) { if (ui.panel.id == "map-tab") { google.maps.event.trigger(map, 'resize'); } }); });
but I have no idea how to implement it (tried several methods without success), or if it even worked.
From all my research, it seems that you need to trigger a map resize event when a tab containing a map is selected. So far, I have not been able to adapt any solutions there, especially because I am familiar with js / jQuery. It looks like someone familiar with js or jQuery can solve this.
Please help me.