When I load the page normally, it will display corrected. However when attempting to load the tab through the url IE: page.php#tab2, the tab navigation will not select the tab I am currently on and will instead load the default tab “tab1”
jquery:
JavaScript
x
$(document).ready(function() {
//When page loads...
$(".tab_content").hide(); //Hide all content
$("ul.tabs li:first").addClass("active").show(); //Activate first tab
$(".tab_content:first").show(); //Show first tab content
var tabId = location.hash; // will look something like "#h-02"
if(tabId){
$(".tab_content").hide(); //Hide all content
$(tabId).addClass("active").show(); //Activate first tab
$(tabId).show(); // this will fired only when url get hash
}
//On Click Event
$("ul.tabs li").click(function() {
$("ul.tabs li").removeClass("active"); //Remove any "active" class
$(this).addClass("active"); //Add "active" class to selected tab
$(".tab_content").hide(); //Hide all tab content
var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content
$(activeTab).fadeIn(); //Fade in the active ID content
return false;
});
html:
JavaScript
<div id="tab2" class="tab_content">
<article class="module width_quarter">
<header><h3>GeoLocation</h3></header>
<div class="module_content">
Content added here
</article><!-- end of styles article -->
<div class="clear"></div>
</div></div><!-- end of #tab2 -->
What it’s doing… https://i.stack.imgur.com/40Tc5.png
What I want it to do… https://i.stack.imgur.com/O8Fit.png
Navigation:
JavaScript
<section id="main" class="column">
<article class="module width_full">
<header><h3 class="tabs_involved">Lead ID: 993923</h3>
<ul class="tabs">
<li><a href="#tab1">Profile</a></li>
<li><a href="#tab2">Roof Information</a></li>
<li><a href="#tab3">Financials</a></li>
<li><a href="#tab4">Work Orders</a></li>
<li><a href="#tab5">Contracts</a></li>
<li><a href="#tab6">Documents</a></li>
<li><a href="#tab7">Gallery</a></li>
</ul>
</header>
Advertisement
Answer
Since you are doing the same thing twice, it’s good practice to consolidate into a single function. Doing it that way can also help find errors since you have to look in one place instead of 2 or more
JavaScript
$(document).ready(function() {
$(".tab_content").hide();
let tabId = location.hash ? location.hash.replace('#', '') : 'tab1';
showTabContent(tabId)
//On Click Event
$("ul.tabs li").click(function() {
let tabId = $(this).find("a").attr("href").replace('#', '');
showTabContent(tabId);
return false
});
});
function showTabContent(tabId) {
$("ul.tabs li").removeClass("active");
$(`a[href='#${tabId}']`).closest('li').addClass("active");
$(".tab_content").hide(); //Hide all tab content
$(`#${tabId}`).fadeIn(); //Fade in the active ID content
}
JavaScript
.tabs li.active a {
background: #000;
color: #fff;
}
JavaScript
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section id="main" class="column">
<article class="module width_full">
<header>
<h3 class="tabs_involved">Lead ID: 993923</h3>
<ul class="tabs">
<li><a href="#tab1">Profile</a></li>
<li><a href="#tab2">Roof Information</a></li>
<li><a href="#tab3">Financials</a></li>
<li><a href="#tab4">Work Orders</a></li>
<li><a href="#tab5">Contracts</a></li>
<li><a href="#tab6">Documents</a></li>
<li><a href="#tab7">Gallery</a></li>
</ul>
</header>
<div id="tab1" class="tab_content">
<article class="module width_quarter">
<header>
<h3>Tab 1</h3>
</header>
<div class="module_content">
Content added here
</article>
<!-- end of styles article -->
<div class="clear"></div>
</div>
<div id="tab2" class="tab_content">
<article class="module width_quarter">
<header>
<h3>GeoLocation</h3>
</header>
<div class="module_content">
Content added here
</article>
<!-- end of styles article -->
<div class="clear"></div>
</div>
<!-- end of #tab2 -->