rwkiii
rwkiii

Reputation: 5846

jQuery UI Tabs - initialize hidden, display after setting active tab

I have 5 panels in jQuery UI tabs. By default the first tab is displayed, but there is a special circumstance where I want to activate the 3rd tab, but in this case there is a delay while the 3rd panel's fields are populated with data.

My approach is to initially set the tabs div wrapper to display: none; while I determine the active tab and finish populating the 3rd tab (if necessary). This can take a second or two and I want to prevent the user from seeing the active tab switch from the first tab to the third tab.

The HTML:

<div id="tabs" style="display: none;">
    <ul>
        <li><a href="#tabs-1">Tab #1</a></li>
        <li><a href="#tabs-2">Tab #2</a></li>
        <li><a href="#tabs-3">Tab #3</a></li>
        <li><a href="#tabs-4">Tab #4</a></li>
        <li><a href="#tabs-5">Tab #5</a></li>
    </ul>

    <div id="tabs-1"> ... </div>
    <div id="tabs-2"> ... </div>
    <div id="tabs-3"> ... </div>
    <div id="tabs-4"> ... </div>
    <div id="tabs-5"> ... </div>
</div>

The jQuery:

_activateTab = 0;

jQuery(document).ready(function () {

    // Initialize tabs as hidden initially
    $("#tabs").tabs({ hide: { duration: 0 } });

    // Disable last 3 tabs by default
    $("#tabs").tabs("option", "disabled", [2, 3, 4]);

    // Under certain circumstances, prepare to show tabs with 3rd tab active
    if (somecondition == true) {
        _activateTab = 2;

        // Enable 3rd tab so it can be activated
        $("#tabs").tabs("enable", _activateTab);
    }

    // Activate appropriate tab
    $("#tabs").tabs("option", "active", _activateTab);

    // Display tabs
    $("#tabs").tabs({ show: { duration: 500 } }).show();
})

It seems like no matter what I try, #tabs is displaying with the first tab as active and THEN switching to the third tab. It's an undesirable visual. I want the tabs to display with the 3rd tab active without having to see the switch from tab #1 to tab #3.

Upvotes: 0

Views: 2045

Answers (1)

T J
T J

Reputation: 43156

You can use the inbuilt active option. Check the condition that determines which tab should be active before initializing tabs, and set activeaccordingly:

$(function() {
   var active = 0;
   if (true) // check the condition
     active = 2; // tab index is zero based. use -1 for last tab
   $("#tabs").tabs({
     active: active
   });
 });
<link href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>


<div id="tabs">
  <ul>
    <li><a href="#tabs-1">Nunc tincidunt</a>
    </li>
    <li><a href="#tabs-2">Proin dolor</a>
    </li>
    <li><a href="#tabs-3">Aenean lacinia</a>
    </li>
  </ul>
  <div id="tabs-1">
    <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper
      leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum.
      Nunc tristique tempus lectus.</p>
  </div>
  <div id="tabs-2">
    <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean
      aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat.
      Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
  </div>
  <div id="tabs-3">
    <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia
      nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
    <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna
      ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum.
      Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
  </div>
</div>

Upvotes: 1

Related Questions