Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Link to specific tab Bootstrap

I'm developing a site with Django Framework and I'm trying to create a way for when a user access a link like http://www.example.com/site/#users_rating it opens a specific tab in the page.

I tried the following code that I found on the Internet (I'm new in JavaScript/JQuery), it isn't working:

<script type="text/javascript">
    $(function() {
      // Javascript to enable link to tab
      var url = document.location.toString();
      if (url.match('#')) {
        $('.nav-tabs a[href=#'+url.split('#')[1]+']').tab('show') ;
      }

      // Change hash for page-reload
      $('a[data-toggle="tab"]').on('show.bs.tab', function (e) {
        window.location.hash = e.target.hash;
      });
    });
</script>

My template uses BootStrap 3, here is the HTML code (with some Django tags):

<div class="col-md-12" style="margin: 0 auto;">
        <section class="panel">
            <header class="panel-heading tab-bg-dark-navy-blue">
                <ul class="nav nav-tabs nav-justified ">
                    <li class="active">
                        <a data-toggle="tab" href="#overview">
                            {% trans "Overview" %}
                        </a>
                    </li>
                    <li class="">
                        <a data-toggle="tab" href="#timeline">
                            {% trans "Timeline" %}
                        </a>
                    </li>
                    <li class="">
                        <a data-toggle="tab" href="#users_rating">
                            {% trans "Users Ratings" %} ({{ ptc.userrating.count }})
                        </a>
                    </li>
                    <li class="">
                        <a data-toggle="tab" href="#rating">
                            {% trans "Our Rating" %}
                        </a>
                    </li>
                </ul>
            </header>
            <div class="panel-body">
                <div class="tab-content tasi-tab">


                    <!-- Overview Tab-Pane -->
                    <div id="overview" class="tab-pane active">
                        {% include 'overview.html' %}
                    </div>

                    <!-- Timeline Tab-Pane -->

                    <div id="timeline" class="tab-pane">
                        {% include 'timeline.html' %}
                    </div>

                    <!-- User Rating Tab-Pane -->

                    <div id="users_rating" class="tab-pane">
                        {% include 'users_rating.html' %}
                    </div>

                    <!-- Our Rating Tab-Pane -->

                    <div id="rating" class="tab-pane">
                        {% include 'rating.html' %}
                    </div>


                </div>
            </div>

        </section>
    </div>

How can I open an specific tab according to an URL in my site?

like image 907
Alexandre Lara Avatar asked Oct 14 '14 03:10

Alexandre Lara


People also ask

How do you open a specific tab via an external link?

Use url #hash es and open tabs based on the change of that value. This approach also have the advantage that the tabs will be directly linkable, so you could use e.g. example.com#sign-up to open a page with a specific tab opened.

How do I toggle between tabs in bootstrap?

To make the tabs toggleable, add the data-toggle="tab" attribute to each link. Then add a . tab-pane class with a unique ID for every tab and wrap them inside a <div> element with class . tab-content .

How do you link a tab in HTML?

You just need an anchor ( <a> ) element with three important attributes: The href attribute set to the URL of the page you want to link to. The target attribute set to _blank , which tells the browser to open the link in a new tab/window, depending on the browser's settings.

How do I make the first tab active in bootstrap?

You can activate a tab or pill navigation without writing any JavaScript code — simply specify the data-bs-toggle="tab" on each tab, or data-bs-toggle="pill" on each pill, as well as create a . tab-pane with unique ID for every tab and wrap them in . tab-content .


2 Answers

Following code works for me

HTML

<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery.min.js"></script>
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" type="text/css" />
  <script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
  <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
<div class="col-md-12" style="margin: 0 auto;">
        <section class="panel">
            <header class="panel-heading tab-bg-dark-navy-blue">
                <ul class="nav nav-tabs nav-justified ">
                    <li class="active">
                        <a data-toggle="tab" href="#overview">
                            {% trans "Overview" %}
                        </a>
                    </li>
                    <li class="">
                        <a data-toggle="tab" href="#timeline">
                            {% trans "Timeline" %}
                        </a>
                    </li>
                    <li class="">
                        <a data-toggle="tab" href="#users_rating">
                            {% trans "Users Ratings" %} ({{ ptc.userrating.count }})
                        </a>
                    </li>
                    <li class="">
                        <a data-toggle="tab" href="#rating">
                            {% trans "Our Rating" %}
                        </a>
                    </li>
                </ul>
            </header>
            <div class="panel-body">
                <div class="tab-content tasi-tab">


                    <!-- Overview Tab-Pane -->
                    <div id="overview" class="tab-pane active">
                        {% include 'overview.html' %}
                    </div>

                    <!-- Timeline Tab-Pane -->

                    <div id="timeline" class="tab-pane">
                        {% include 'timeline.html' %}
                    </div>

                    <!-- User Rating Tab-Pane -->

                    <div id="users_rating" class="tab-pane">
                        {% include 'users_rating.html' %}
                    </div>

                    <!-- Our Rating Tab-Pane -->

                    <div id="rating" class="tab-pane">
                        {% include 'rating.html' %}
                    </div>
                </div>
            </div>

        </section>
    </div>
</body>
</html>

JS

    <script type="text/javascript">
        $(function() {
          // Javascript to enable link to tab
          var hash = document.location.hash;
          if (hash) {
            console.log(hash);
            $('.nav-tabs a[href='+hash+']').tab('show');
          }

          // Change hash for page-reload
          $('a[data-toggle="tab"]').on('show.bs.tab', function (e) {
            window.location.hash = e.target.hash;
          });
        });
    </script>
like image 76
Fizer Khan Avatar answered Oct 01 '22 07:10

Fizer Khan


Thanks a bunch. With newer versions of JQuery (mine=3.3.1) you need to make a little alteration:

<script>
     $(function() {
       // Javascript to enable link to tab
       var hash = document.location.hash;
       if (hash) {
         console.log(hash);
         $('.nav-tabs a[href=\\'+hash+']').tab('show');
       }

       // Change hash for page-reload
       $('a[data-toggle="tab"]').on('show.bs.tab', function (e) {
         window.location.hash = e.target.hash;
       });
     });
 </script>

Hope this saves someone the hour I lost

like image 28
Dt23 Avatar answered Oct 01 '22 06:10

Dt23