Bootstrap 3: Behalten Sie die ausgewählte Registerkarte bei der Seitenaktualisierung bei


120

Ich versuche, die ausgewählte Registerkarte beim Aktualisieren mit Bootstrap 3 aktiv zu halten . Versucht und überprüft mit einigen Fragen, die hier bereits gestellt wurden, aber keine Arbeit für mich. Ich weiß nicht, wo ich falsch liege. Hier ist mein Code

HTML

<!-- tabs link -->
<ul class="nav nav-tabs" id="rowTab">
    <li class="active"><a href="#personal-info" data-toggle="tab">Personal Information</a></li>
    <li><a href="#Employment-info" data-toggle="tab">Employment Information</a></li>
    <li><a href="#career-path" data-toggle="tab">Career Path</a></li>
    <li><a href="#warnings" data-toggle="tab">Warning</a></li>
</ul>
<!-- end: tabs link -->

<div class="tab-content">
    <div class="tab-pane active" id="personal-info">
        tab data here...
    </div>

    <div class="tab-pane" id="Employment-info">
        tab data here...
    </div>

    <div class="tab-pane" id="career-path">
        tab data here...
    </div>

    <div class="tab-pane" id="warnings">
        tab data here...
    </div>
</div>

Javascript :

// tab
$('#rowTab a:first').tab('show');

//for bootstrap 3 use 'shown.bs.tab' instead of 'shown' in the next line
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
//save the latest tab; use cookies if you like 'em better:
localStorage.setItem('selectedTab', $(e.target).attr('id'));
});

//go to the latest tab, if it exists:
var selectedTab = localStorage.getItem('selectedTab');
if (selectedTab) {
  $('#'+selectedTab).tab('show');
}

Der Grund, warum es nicht funktioniert, ist, dass die ausgewählte Registerkarte nicht gespeichert wird. Als ich das tat console.log("selectedTab::"+selectedTab);, bekam ich : selectedTab::undefined. Die Logik, die Sie angewendet haben, ist also nicht korrekt
The Dark Knight

Können Sie mir bitte sagen, was ich tun soll?
Code Lover

Ich versuche es zu beheben. Wenn ich das tue, werde ich die Antwort hier für Sie posten
The Dark Knight

Ich schätze das .. danke für Ihre Hilfe ..
Code Lover

Ich denke, das wird funktionieren: jsbin.com/UNuYoHE/2/edit . Wenn es mich wissen lässt, werde ich die Antwort auf eine klare Art und Weise veröffentlichen. Vielleicht möchten Sie sich auch die Texte auf der Registerkarte div ansehen. Sie geben nicht die richtige Antwort, wenn Sie darauf klicken. Wenn Sie beispielsweise auf Tab4 klicken, erhalten Sie Tab1-Text.
Der dunkle Ritter

Antworten:


187

Ich bevorzuge es, die ausgewählte Registerkarte im Hashwert des Fensters zu speichern. Dies ermöglicht auch das Senden von Links an Kollegen, die dann "dieselbe" Seite sehen. Der Trick besteht darin, den Hash der Position zu ändern, wenn eine andere Registerkarte ausgewählt wird. Wenn Sie auf Ihrer Seite bereits # verwenden, muss möglicherweise das Hash-Tag aufgeteilt werden. In meiner App verwende ich ":" als Hashwerttrennzeichen.

<ul class="nav nav-tabs" id="myTab">
  <li class="active"><a href="#home">Home</a></li>
  <li><a href="#profile">Profile</a></li>
  <li><a href="#messages">Messages</a></li>
  <li><a href="#settings">Settings</a></li>
</ul>

<div class="tab-content">
  <div class="tab-pane active" id="home">home</div>
  <div class="tab-pane" id="profile">profile</div>
  <div class="tab-pane" id="messages">messages</div>
  <div class="tab-pane" id="settings">settings</div>
</div>

JavaScript muss nach dem oben Gesagten in einen <script>...</script>Teil eingebettet werden .

$('#myTab a').click(function(e) {
  e.preventDefault();
  $(this).tab('show');
});

// store the currently selected tab in the hash value
$("ul.nav-tabs > li > a").on("shown.bs.tab", function(e) {
  var id = $(e.target).attr("href").substr(1);
  window.location.hash = id;
});

// on load of the page: switch to the currently selected tab
var hash = window.location.hash;
$('#myTab a[href="' + hash + '"]').tab('show');

Im e.preventDefault();$(this).tab('show');
Skriptabschnitt

12
Leider springt der Browser zum Tab-Inhalt, wenn Sie darauf klicken. Dies ist das Standardverhalten, wenn Sie den Wert window.location.hash festlegen. Eine Alternative könnte die Verwendung von push.state sein, Sie benötigen jedoch eine Polyfüllung für IE <= 9. Weitere Informationen und andere alternative Lösungen finden Sie unter stackoverflow.com/questions/3870057/…
Philipp Michael

3
Gibt es eine Möglichkeit, das "falsche Scrollen" zur betreffenden ID zu verhindern, wenn wir auf das Element klicken?
Patrice Poliquin

1
Der Bildlauf erfolgt aufgrund der den Registerkarten zugewiesenen ID. Wenn Sie semantische IDs verwenden und den Hash entstellen (dh Präfix / Suffix hinzufügen), wird er nicht als gültige ID erkannt und es wird kein Bildlauf durchgeführt. Wird die Antwort damit erweitern.
Alex Mazzariol

1
@koppor es funktioniert, aber wenn ich direkt auf die andere gespeicherte Registerkarte (über den Link) springe, wird die Startregisterkarte oder die erste Registerkarte schnell um 1 Sekunde angezeigt, bevor sie zur Registerkarte im Link springt. Jede Idee, um zu verhindern, dass die erste angezeigt wird Registerkarte, da es nicht benötigt wird?
Mboy

135

Dies ist das Beste, das ich versucht habe:

$(document).ready(function() {
    if (location.hash) {
        $("a[href='" + location.hash + "']").tab("show");
    }
    $(document.body).on("click", "a[data-toggle='tab']", function(event) {
        location.hash = this.getAttribute("href");
    });
});
$(window).on("popstate", function() {
    var anchor = location.hash || $("a[data-toggle='tab']").first().attr("href");
    $("a[href='" + anchor + "']").tab("show");
});

20
Dieser funktioniert besser als die akzeptierte Lösung (Mit besser meine ich: Kopieren und Einfügen funktioniert: D)
Cyril Duchon-Doris

3
bestes Kopieren und Einfügen aller Zeiten: P
Ghostff

1
Ich denke, es "a[data-toggle=tab]"wäre besser, den Selektor zu ändern . Die Art und Weise, wie der Selektor jetzt geschrieben ist, ändert auch die Browser-URL, wenn Sie auf einen Link klicken, um beispielsweise ein Modal zu öffnen.
Leifdenby

5
Möglicherweise möchten Sie dem Selektor eine Zeichenfolgenklammer hinzufügen, z. B. 'a [href = "' + location.hash + '"]'. Stolperte über einen Syntaxfehler.
Asdacap

1
Die Verwendung dieses Ist-Status steht im Widerspruch zu Bootstrap-Dropdowns (die data-toggle="dropdown"in einem Fall verwendet werden und die ich zufällig auf derselben Seite mit Registerkarten habe. Wie hier vorgeschlagen, hat das Ersetzen $(document.body).on("click", "a[data-toggle]", function(event) {durch $(document.body).on("click", "a[data-toggle='tab']", function(event) {nur den Trick für mich getan.
Jiveman

44

Eine Mischung aus anderen Antworten:

  • Kein Klick auf Klick
  • Speichern Sie vor Ort Hash
  • Auf localStorage speichern (zB: zum Senden des Formulars)
  • Einfach kopieren & einfügen;)

    if (location.hash) {
      $('a[href=\'' + location.hash + '\']').tab('show');
    }
    var activeTab = localStorage.getItem('activeTab');
    if (activeTab) {
      $('a[href="' + activeTab + '"]').tab('show');
    }
    
    $('body').on('click', 'a[data-toggle=\'tab\']', function (e) {
      e.preventDefault()
      var tab_name = this.getAttribute('href')
      if (history.pushState) {
        history.pushState(null, null, tab_name)
      }
      else {
        location.hash = tab_name
      }
      localStorage.setItem('activeTab', tab_name)
    
      $(this).tab('show');
      return false;
    });
    $(window).on('popstate', function () {
      var anchor = location.hash ||
        $('a[data-toggle=\'tab\']').first().attr('href');
      $('a[href=\'' + anchor + '\']').tab('show');
    });

1
Schade, dass ich zuerst die anderen Lösungen ausprobiert habe - diese funktioniert am besten!
tdc

2
Beste Lösung, die ich aus vielen verschiedenen versucht habe. Das Springen zum Tab-Inhalt war nervig
Kentor

4
Content Jump ist immer noch da mit dieser Antwort
Shazyriver

2
Hervorragende Lösung: Kopieren, einfügen, zum Mittagessen gehen. Nett.
Gary Stanton

1
Beste Lösung aller Zeiten
Glück

19

Xavis Code funktionierte fast vollständig. Wenn Sie jedoch zu einer anderen Seite navigieren, ein Formular senden und dann mit meinen Registerkarten auf die Seite umgeleitet werden, wird die gespeicherte Registerkarte überhaupt nicht geladen.

localStorage zur Rettung (leicht geänderter Nguyen-Code):

$('a[data-toggle="tab"]').click(function (e) {
    e.preventDefault();
    $(this).tab('show');
});

$('a[data-toggle="tab"]').on("shown.bs.tab", function (e) {
    var id = $(e.target).attr("href");
    localStorage.setItem('selectedTab', id)
});

var selectedTab = localStorage.getItem('selectedTab');
if (selectedTab != null) {
    $('a[data-toggle="tab"][href="' + selectedTab + '"]').tab('show');
}

2
Das ist Gold! Es funktioniert sogar mit Modalen! Gute Antwort.
Lech Osiński

2
Dieser Code ist fantastisch und funktioniert hervorragend, wenn die Registerkarte ausgewählt bleiben soll, auch wenn der Benutzer die Site verlässt (die Sitzung beendet) und später wiederkommt. Ersetzen Sie die beiden Instanzen von "localStorage" durch "sessionStorage", damit die Auswahl während der aktuellen Sitzung nur für die aktuelle Sitzung bestehen bleibt und Sie bei der nächsten Sitzung zur Standardregisterkarte zurückkehren.
Gary.Ray

Kurze, süße Lösung zum Kopieren / Einfügen, die hervorragend mit Bootstrap 4 funktioniert.
CFP-Unterstützung

Wow enorme Lösung!
Jilani A

1
[data-toggle="pill"]für Pillen
mxmissile

12

Dieser verwendet HTML5 localStoragezum Speichern der aktiven Registerkarte

$('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
    localStorage.setItem('activeTab', $(e.target).attr('href'));
});
var activeTab = localStorage.getItem('activeTab');
if (activeTab) {
   $('#navtab-container a[href="' + activeTab + '"]').tab('show');
}

Ref: http://www.tutorialrepublic.com/faq/how-to-keep-the-current-tab-active-on-page-reload-in-bootstrap.php https://www.w3schools.com/bootstrap /bootstrap_ref_js_tab.asp


Das ist schön, aber ein Nachteil ist, dass Sie keine Links mit aktiven Tabs teilen können
lfender6445

Das ist schön, der Vorteil ist, dass es kein Problem gibt, bei dem "window.location.hash" dem http-Anforderungsparameter in der URL einen Hashwert hinzufügt, was zu Kollisionen und fehlerhaften Parametern führt, die von anderen http-Anforderungen wie Paginierung usw. gelesen werden.
Dung

4

Basierend auf den Antworten von Xavi Martínez und koppor habe ich eine Lösung gefunden, die den URL-Hash oder localStorage verwendet, je nachdem, ob letzterer verfügbar ist:

function rememberTabSelection(tabPaneSelector, useHash) {
    var key = 'selectedTabFor' + tabPaneSelector;
    if(get(key)) 
        $(tabPaneSelector).find('a[href=' + get(key) + ']').tab('show');

    $(tabPaneSelector).on("click", 'a[data-toggle]', function(event) {
        set(key, this.getAttribute('href'));
    }); 

    function get(key) {
        return useHash ? location.hash: localStorage.getItem(key);
    }

    function set(key, value){
        if(useHash)
            location.hash = value;
        else
            localStorage.setItem(key, value);
    }
}

Verwendung:

$(document).ready(function () {
    rememberTabSelection('#rowTab', !localStorage);
    // Do Work...
});

Es hält nicht mit dem Zurück-Knopf Schritt, wie es bei der Lösung von Xavi Martínez der Fall ist .


4

Mein Code, es funktioniert für mich, ich benutze localStorageHTML5

$('#tabHistory  a').click(function(e) {
  e.preventDefault();
  $(this).tab('show');
});
$("ul.nav-tabs#tabHistory > li > a").on("shown.bs.tab", function(e) {
  var id = $(e.target).attr("href");
  localStorage.setItem('selectedTab', id)
});
var selectedTab = localStorage.getItem('selectedTab');
$('#tabHistory a[href="' + selectedTab + '"]').tab('show');

4

Ich habe es versucht und es funktioniert: (Bitte ersetzen Sie dies durch die Pille oder Lasche, die Sie verwenden)

    jQuery(document).ready(function() {
        jQuery('a[data-toggle="pill"]').on('show.bs.tab', function(e) {
            localStorage.setItem('activeTab', jQuery(e.target).attr('href'));
        });

        // Here, save the index to which the tab corresponds. You can see it 
        // in the chrome dev tool.
        var activeTab = localStorage.getItem('activeTab');

        // In the console you will be shown the tab where you made the last 
        // click and the save to "activeTab". I leave the console for you to 
        // see. And when you refresh the browser, the last one where you 
        // clicked will be active.
        console.log(activeTab);

        if (activeTab) {
           jQuery('a[href="' + activeTab + '"]').tab('show');
        }
    });

Ich hoffe es würde jemandem helfen.

Hier ist das Ergebnis: https://jsfiddle.net/neilbannet/ego1ncr5/5/


4

Nun, das ist schon 2018, aber ich denke, es ist besser spät als nie (wie ein Titel in einer Fernsehsendung), lol. Hier unten ist der jQuery-Code, den ich während meiner Diplomarbeit erstellt habe.

<script type="text/javascript">
$(document).ready(function(){
    $('a[data-toggle="tab"]').on('show.affectedDiv.tab', function(e) {
        localStorage.setItem('activeTab', $(e.target).attr('href'));
    });
    var activeTab = localStorage.getItem('activeTab');
    if(activeTab){
        $('#myTab a[href="' + activeTab + '"]').tab('show');
    }
});
</script>

und hier ist der Code für Bootstrap-Registerkarten:

<div class="affectedDiv">
    <ul class="nav nav-tabs" id="myTab">
        <li class="active"><a data-toggle="tab" href="#sectionA">Section A</a></li>
        <li><a data-toggle="tab" href="#sectionB">Section B</a></li>
        <li><a data-toggle="tab" href="#sectionC">Section C</a></li>
    </ul>
    <div class="tab-content">
        <div id="sectionA" class="tab-pane fade in active">
            <h3>Section A</h3>
            <p>Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui. Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth.</p>
        </div>
        <div id="sectionB" class="tab-pane fade">
            <h3>Section B</h3>
            <p>Vestibulum nec erat eu nulla rhoncus fringilla ut non neque. Vivamus nibh urna, ornare id gravida ut, mollis a magna. Aliquam porttitor condimentum nisi, eu viverra ipsum porta ut. Nam hendrerit bibendum turpis, sed molestie mi fermentum id. Aenean volutpat velit sem. Sed consequat ante in rutrum convallis. Nunc facilisis leo at faucibus adipiscing.</p>
        </div>
        <div id="sectionC" class="tab-pane fade">
            <h3>Section C</h3>
            <p>Vestibulum nec erat eu nulla rhoncus fringilla ut non neque. Vivamus nibh urna, ornare id gravida ut, mollis a magna. Aliquam porttitor condimentum nisi, eu viverra ipsum porta ut. Nam hendrerit bibendum turpis, sed molestie mi fermentum id. Aenean volutpat velit sem. Sed consequat ante in rutrum convallis. Nunc facilisis leo at faucibus adipiscing.</p>
        </div>
    </div>
</div>


Vergessen Sie nicht, den Bootstrap und andere grundlegende Dinge aufzurufen 

Hier sind Schnellcodes für Sie:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>


Kommen wir nun zur Erklärung:

Der jQuery-Code im obigen Beispiel ruft einfach den href-Attributwert des Elements ab, wenn eine neue Registerkarte mit der Methode jQuery .attr () angezeigt wurde, und speichert sie lokal im Browser des Benutzers über das HTML5-Objekt localStorage. Später, wenn der Benutzer die Seite aktualisiert, ruft er diese Daten ab und aktiviert die zugehörige Registerkarte über die .tab-Methode ('show').

Suchen Sie nach Beispielen? Hier ist eine für euch. https://jsfiddle.net/Wineson123/brseabdr/

Ich wünschte, meine Antwort könnte euch allen helfen. Cheerio! :) :)


2

Da ich noch keinen Kommentar abgeben kann, habe ich die Antwort von oben kopiert, es hat mir wirklich geholfen. Aber ich habe es geändert, um mit Cookies anstelle von #id zu arbeiten, also wollte ich die Änderungen teilen. Auf diese Weise kann die aktive Registerkarte länger als nur eine Aktualisierung (z. B. mehrfache Umleitung) gespeichert werden oder wenn die ID bereits verwendet wird und Sie die Koppors-Split-Methode nicht implementieren möchten.

<ul class="nav nav-tabs" id="myTab">
    <li class="active"><a href="#home">Home</a></li>
    <li><a href="#profile">Profile</a></li>
    <li><a href="#messages">Messages</a></li>
    <li><a href="#settings">Settings</a></li>
</ul>

<div class="tab-content">
    <div class="tab-pane active" id="home">home</div>
    <div class="tab-pane" id="profile">profile</div>
    <div class="tab-pane" id="messages">messages</div>
    <div class="tab-pane" id="settings">settings</div>
</div>

<script>
$('#myTab a').click(function (e) {
    e.preventDefault();
    $(this).tab('show');
});

// store the currently selected tab in the hash value
$("ul.nav-tabs > li > a").on("shown.bs.tab", function (e) {
    var id = $(e.target).attr("href").substr(1);
    $.cookie('activeTab', id);
});

    // on load of the page: switch to the currently selected tab
    var hash = $.cookie('activeTab');
    if (hash != null) {
        $('#myTab a[href="#' + hash + '"]').tab('show');
    }
</script>

Danke für das Update. In Wirklichkeit suchte ich nach einer solchen Lösung, aber als ich wollte, bekam ich nur eine @ koppor-Antwort als funktionierende. In der Tat ist dies eine der besten Möglichkeiten, wenn wir die Back-Funktion verwenden möchten. Vielen Dank für das Update
Code Lover

2

Ich habe den von Xavi Martínez angebotenen Code ausprobiert . Es hat funktioniert, aber nicht für IE7. Das Problem ist - Registerkarten verweisen nicht auf relevante Inhalte.
Daher bevorzuge ich diesen Code, um dieses Problem zu lösen.

function pageLoad() {
  $(document).ready(function() {

    var tabCookieName = "ui-tabs-1"; //cookie name
    var location = $.cookie(tabCookieName); //take tab's href

    if (location) {
      $('#Tabs a[href="' + location + '"]').tab('show'); //activate tab
    }

    $('#Tabs a').click(function(e) {
      e.preventDefault()
      $(this).tab('show')
    })

    //when content is alredy shown - event activate 
    $('#Tabs a').on('shown.bs.tab', function(e) {
      location = e.target.hash; // take current href
      $.cookie(tabCookieName, location, {
        path: '/'
      }); //write href in cookie
    })
  });
};

Das ist schön, aber ein Nachteil ist, dass Sie keine Links mit aktiven Tabs teilen können
lfender6445

1

Danke für das Teilen.

Indem Sie alle Lösungen lesen. Ich habe eine Lösung gefunden, die den URL-Hash oder localStorage verwendet, abhängig von der Verfügbarkeit des letzteren mit dem folgenden Code:

$(function(){
    $(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
        localStorage.setItem('activeTab', $(e.target).attr('href'));
    })

    var hash = window.location.hash;
    var activeTab = localStorage.getItem('activeTab');

    if(hash){
          $('#project-tabs  a[href="' + hash + '"]').tab('show');   
    }else if (activeTab){
        $('#project-tabs a[href="' + activeTab + '"]').tab('show');
    }
});

1

Für Bootstrap v4.3.1. Versuchen Sie es unten:

$(document).ready(function() {
    var pathname = window.location.pathname; //get the path of current page
    $('.navbar-nav > li > a[href="'+pathname+'"]').parent().addClass('active');
})

0

Mit html5 habe ich mir das ausgedacht:

Einige waren auf der Seite:

<h2 id="heading" data-activetab="@ViewBag.activetab">Some random text</h2>

Der Ansichtsbeutel sollte nur die ID für die Seite / das Element enthalten, z. B.: "Testen"

Ich habe eine site.js erstellt und den Scrip auf der Seite hinzugefügt:

/// <reference path="../jquery-2.1.0.js" />
$(document).ready(
  function() {
    var setactive = $("#heading").data("activetab");
    var a = $('#' + setactive).addClass("active");
  }
)

Jetzt müssen Sie nur noch Ihre IDs zu Ihrer Navigationsleiste hinzufügen. Z.B.:

<ul class="nav navbar-nav">
  <li **id="testing" **>
    @Html.ActionLink("Lalala", "MyAction", "MyController")
  </li>
</ul>

Alle begrüßen das Datenattribut :)


0

Zusätzlich zu Xavi Martínez 'Antwort vermeidet er den Sprung beim Klicken

Springen vermeiden

$(document).ready(function(){

    // show active tab

    if(location.hash) {

        $('a[href=' + location.hash + ']').tab('show');
    }

    // set hash on click without jumb

    $(document.body).on("click", "a[data-toggle]", function(e) {

        e.preventDefault();

        if(history.pushState) {

            history.pushState(null, null, this.getAttribute("href"));
        }
        else {

            location.hash = this.getAttribute("href");
        }

        $('a[href=' + location.hash + ']').tab('show');

        return false;
    });
});

// set hash on popstate

$(window).on('popstate', function() {

    var anchor = location.hash || $("a[data-toggle=tab]").first().attr("href");

    $('a[href=' + anchor + ']').tab('show');
});

Verschachtelte Registerkarten

Implementierung mit dem Zeichen "_" als Trennzeichen

$(document).ready(function(){

    // show active tab

    if(location.hash) {

        var tabs = location.hash.substring(1).split('_');

        $.each(tabs,function(n){

            $('a[href=#' + tabs[n] + ']').tab('show');
        });         

        $('a[href=' + location.hash + ']').tab('show');
    }

    // set hash on click without jumb

    $(document.body).on("click", "a[data-toggle]", function(e) {

        e.preventDefault();

        if(history.pushState) {

            history.pushState(null, null, this.getAttribute("href"));
        }
        else {

            location.hash = this.getAttribute("href");
        }

        var tabs = location.hash.substring(1).split('_');

        //console.log(tabs);

        $.each(tabs,function(n){

            $('a[href=#' + tabs[n] + ']').tab('show');
        });

        $('a[href=' + location.hash + ']').tab('show');

        return false;
    });
});

// set hash on popstate

$(window).on('popstate', function() {

    var anchor = location.hash || $("a[data-toggle=tab]").first().attr("href");

    var tabs = anchor.substring(1).split('_');

    $.each(tabs,function(n){

        $('a[href=#' + tabs[n] + ']').tab('show');
    });

    $('a[href=' + anchor + ']').tab('show');
});

0

Wir haben jquery trigger verwendet, um ein Skript zum Laden herunterzuladen

$ (". class_name"). trigger ('click');


0

Wehe, es gibt so viele Möglichkeiten, dies zu tun. Ich habe mir das ausgedacht, kurz und einfach. Hoffe das hilft anderen.

  var url = document.location.toString();
  if (url.match('#')) {
    $('.nav-tabs a[href="#' + url.split('#')[1] + '"]').tab('show');
  } 

  $('.nav-tabs a').on('shown.bs.tab', function (e) {
    window.location.hash = e.target.hash;
    if(e.target.hash == "#activity"){
      $('.nano').nanoScroller();
    }
  })

0

Es gibt eine Lösung, nachdem die Seite neu geladen und die erwartete Registerkarte wie ausgewählt beibehalten wurde.

Angenommen, nach dem Speichern der Daten lautet die umgeleitete URL: my_url # tab_2

Durch das folgende Skript bleibt nun Ihre erwartete Registerkarte ausgewählt.

$(document).ready(function(){
    var url = document.location.toString();
    if (url.match('#')) {
        $('.nav-tabs a[href="#' + url.split('#')[1] + '"]').tab('show');
        $('.nav-tabs a').removeClass('active');
    }
});

Dort wird die aktive Klasse automatisch dem Ankertag zugewiesen, daher wird sie durch $ ('. Nav-tabs a') entfernt. RemoveClass ('active'); dieses Skript.
Hasib Kamal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.