2017-07-21 4 views
0

Ich habe eine Webseite, die das jquery Tabs-Steuerelement verwendet. Auf dieser Seite werden die Registerkarten basierend auf dem, was der Benutzer auswählt, dynamisch generiert. Diese Registerkarten zeigen den Inhalt von Seiten in meiner Web-App. Zum Beispiel wählt der Benutzer die Kategorie "Inventar" und wählt dann die Option "Objekte" und lädt die Webseite "Inventar -> Objekte" in einem neuen Tab. Auf der "Items" -Seite gibt es Links, auf die der Nutzer klicken kann, um auf der Registerkarte zu einer anderen Webseite in meiner Web-App zu navigieren (zB: Artikel bearbeiten). Klickt der Benutzer auf eine andere Registerkarte (z. B. die Registerkarte "Aufträge") und kehrt dann zu seiner Registerkarte "Elemente" zurück, aktualisiert er die Registerkarte auf der Seite, die die Registerkarte lädt, wenn sie neu erstellt wird, anstelle der letzten Stelle des Benutzers Er verließ die Registerkarte.jquery tabs - Speichern Registerkarte Inhalt bei der Navigation innerhalb der Registerkarte

Wie kann ich den Ort beibehalten, an dem der Benutzer war, als er den Tab verlassen hat?

Ich benutze MVC 4 Razor und jquery.

Für mehr Klarheit bitte meine komplette html unten:

<script> 
 
    debugger; 
 
    $(document).ready(function() { 
 
     var tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>", 
 
      tabCounter = 2; 
 

 
     var tabs = $("#tabs").tabs(); 
 

 
     $("#open_module").button().on("click", function() { 
 
      $("#dialog").dialog("open"); 
 
     }); 
 

 
     // Modal dialog init: custom buttons and a "close" callback resetting the form inside 
 
     $("#dialog").dialog({ 
 
      autoOpen: false, 
 
      modal: true, 
 
      buttons: { 
 
       Add: function() { 
 
        addTab(); 
 
        $(this).dialog("close"); 
 
       }, 
 
       Cancel: function() { 
 
        $(this).dialog("close"); 
 
       } 
 
      }, 
 
      close: function() { 
 
       form[0].reset(); 
 
      } 
 
     }); 
 

 
     // AddTab form: calls addTab function on submit and closes the dialog 
 
     var form = $("#dialog").find("form").on("submit", function (event) { 
 
      addTab(); 
 
      $("#dialog").dialog("close"); 
 
      event.preventDefault(); 
 
     }); 
 

 
     // Actual addTab function: adds new tab using the input from the form above 
 
     function addTab() { 
 
      var e = document.getElementById("page-links"); 
 
      var link = e[e.selectedIndex].value; 
 
      var tabTitle = e[e.selectedIndex].text; 
 
      var tabContent = "<object type='text/html' data='" + link + "' width='800px' height='600px' style='overflow:hidden;'/>"; 
 
      var label = tabTitle || "Tab " + tabCounter, id = "tabs-" + tabCounter, li = $(tabTemplate.replace(/#\{href\}/g, "#" + id).replace(/#\{label\}/g, label)), tabContentHtml = tabContent || "Tab " + tabCounter + " content."; 
 

 
      tabs.find(".ui-tabs-nav").append(li); 
 
      tabs.append("<div id='" + id + "'>" + tabContentHtml + "</div>"); 
 
      tabs.tabs("refresh"); 
 
      tabCounter++; 
 
     } 
 

 
     // Close icon: removing the tab on click 
 
     tabs.on("click", "span.ui-icon-close", function() { 
 
      var panelId = $(this).closest("li").remove().attr("aria-controls"); 
 
      $("#" + panelId).remove(); 
 
      tabs.tabs("refresh"); 
 
     }); 
 

 
     tabs.on("keyup", function (event) { 
 
      if (event.altKey && event.keyCode === $.ui.keyCode.BACKSPACE) { 
 
       var panelId = tabs.find(".ui-tabs-active").remove().attr("aria-controls"); 
 
       $("#" + panelId).remove(); 
 
       tabs.tabs("refresh"); 
 
      } 
 
     }); 
 

 
     
 
    }); 
 

 
    function LoadLinks(category) { 
 
     var url = "/Home/LoadLinks/"; 
 
     var e = document.getElementById("categories"); 
 
     var _custid = e[e.selectedIndex].value; 
 
     $("#page-links").empty(); 
 

 
     $.ajax({ 
 
      url: url, 
 
      data: { cat: category }, 
 
      cache: false, 
 
      type: "POST", 
 
      success: function (data) { 
 
       $.each(data, function (i, data) { 
 
        $("#page-links").append('<option value="' + data.Value + '">' + data.Text + '</option>'); 
 
       }); 
 
      }, 
 
      error: function (reponse) { 
 
       alert("error : " + reponse); 
 
      } 
 
     }); 
 
     return false; 
 
    } 
 

 
</script>
@{ 
 
    ViewBag.Title = "my title"; 
 
} 
 
@section featured { 
 
    <section class="featured"> 
 
     <div class="content-wrapper"> 
 
      <hgroup class="title"> 
 
       <h1>@ViewBag.Title.</h1> 
 
       <h2>@ViewBag.Message</h2> 
 
      </hgroup> 
 
      <p> 
 
       
 
      </p> 
 
     </div> 
 
    </section> 
 
} 
 
<button id="open_module">Open Module</button> 
 

 
<div id="dialog" title="Open Module"> 
 
    <form> 
 
    <fieldset class="ui-helper-reset"> 
 
     <legend>PageSelector</legend> 
 
     <label id="category-label">Category</label> 
 
     <select id="categories" onchange="javascript:LoadLinks(this.value);"> 
 
      <option value="0">Select one...</option> 
 
      <option value="Inventory">Inventory</option> 
 
      <option value="CustomerManagement">Customer Management</option> 
 
      <option value="VendorManagement">Vendor Management</option> 
 
      <option value="Invoicing">Invoicing</option> 
 
      <option value="Receiving">Receiving</option> 
 
      <option value="Purchasing">Purchasing</option> 
 
      <option value="Human Resources">Human Resources</option> 
 
      <option value="OrderEntry">Order Entry</option> 
 
     </select> 
 
     <select id="page-links"> 
 
      <option value="value">Select a category...</option> 
 
     </select> 
 
    </fieldset> 
 
    </form> 
 
</div> 
 

 
<div id="tabs"> 
 

 
    <ul> 
 
     <li class="current"><a href="#tabs-1">About</a></li> 
 
    </ul> 
 

 
     <div id="tabs-1"> 
 
      <object type="text/html" data="/Home/About" width="800px" height="600px" style="overflow:hidden;"/> 
 
     </div> 
 

 
</div>

+0

Sie können Cookies oder localStorage verwenden, um einen Status zu erhalten. Also jedes Mal, wenn ein Besucher auf verschiedene Registerkarten klickt, speichern Sie die Aktion in localStorage, dann laden Sie auf einer neuen Seite chceck, wenn Sie einen Zustand gespeichert haben - wenn ja, laden Sie diesen Zustand – Matus

+0

Auch kam mir in den Sinn können Sie # verwenden, um aktuelle zu speichern Zustand! Das funktioniert besser mit Browser-Verlauf und Zurück-Taste – Matus

+0

Können Sie ein Beispiel geben? Ich weiß, wie man die Tabliste beim Laden der Seite speichert, aber ich spreche von den Inhalten in den Tabs. Ich hoffe, dass das, was ich frage, Sinn macht. – jforward5

Antwort

0

Die Antwort ist also, Chrome ist das Problem. Die Seite funktioniert wie erwartet, wenn sie von IE und FireFox geöffnet wird, nur Chrome wird nicht gut spielen. Und es ist eine Schande, Chrome war mein Favorit :(

Aus irgendeinem Grund lädt Chrome die Registerkarte neu, wenn Sie darauf klicken, wodurch die Standardseite geöffnet wird. Wenn Sie IE oder FireFox verwenden, wird die Registerkarte nicht neu geladen Jetzt weiß ich, warum einige Webseiten browserspezifisch sind :)

Verwandte Themen