【问题标题】:How can I keep the selected tabs open when page is reloaded重新加载页面时如何使选定的选项卡保持打开状态
【发布时间】:2019-03-07 08:57:24
【问题描述】:

这是一个侧边栏菜单,直到现在每次我重新加载页面时它都会关闭选项卡,这很烦人,我应该添加什么来解决这个问题?

here is a code pen snippet

_menu.html.erb

<div  id="mySidepanel" class="sidepanel">
 <button class="closebtn" onclick="closeNav()"><i class="fas fa-times-circle"></i></button>

    <div class="dropdown-container">
    <%= link_to "Journal", "#", class: "drop-item" %>
    <%= link_to "Stats","#", class: "drop-item" %>
    </div>

    <li class="dropdown-btn">Suppliers
      <i class="fa fa-caret-down"></i>
    </li>

    <div class="dropdown-container">
        <%= link_to "Add a supplier", "#",  class: "drop-item" %>
        <%= link_to "Suppliers", "#",  class: "drop-item" %>
    </div>

    <%= link_to "Orders", "#",  class: "list-item" %>
    <%= link_to "Users", "#",  class: "list-item" %>
</div>

sidebar.js

编辑,添加了整个代码,我没有使用 Bootstrap 下拉菜单

$(document).on('turbolinks:load', function() {

      if ($('.dropdown-btn')){
          activeTab = document.getElementsByClassName('active')[0].dataset.activeDropdown.myArticles
          sessionStorage.setItem('foo', activeTab);
      } 
      if(activeTab){
          $('#mySidepanel a[href="' + activeTab + '"]').tab('show');
      }
    var dropdown = document.getElementsByClassName("dropdown-btn");
    var i; 

    for (i = 0; i < dropdown.length; i++) {
      dropdown[i].addEventListener("click", function() {
      this.classList.toggle("active");
      var dropdownContent = this.nextElementSibling;
      if (dropdownContent.style.display === "block") {
      dropdownContent.style.display = "none";
      } else {
      dropdownContent.style.display = "block";
      }
      });
    }
});


function openNav() {
  document.getElementById("mySidepanel").style.width = "180px";
}

function closeNav() {
  document.getElementById("mySidepanel").style.width = "0";
}

更新

我添加了这个 js 代码,但我需要帮助:

$('.drop-item').on('shown.bs.tab', function (e) {
    localStorage.setItem('activeTab', $(e.target).attr('href'));
});

var activeTab = localStorage.getItem('activeTab');
if(activeTab){
    $('#mySidepanel a[href="' + activeTab + '"]').tab('show');
}

【问题讨论】:

  • 您可以使用 localStorage 跟踪用户打开的内容,然后在下次加载页面时打开这些选项卡。
  • 好的,但是怎么做?请问?

标签: javascript html ruby-on-rails


【解决方案1】:

您必须使用 sessionStorage(我认为会话的存储足以满足您的需求)。

在选项卡上更改时,存储选项卡的值(例如他的 ID):

localStorage.setItem('tabId', 'foo');

然后,在页面加载时,如果您的密钥存在,请打开您的标签。使用 jQuery,应该是这样的:

$(function(){
   if (localStorage.getItem('tabId') !== null) {
      document.getElementById(localStorage.getItem('tabId')).show();
   }
}

给你一个想法。它不是更清洁,因为它是。例如,您应该重写 openNav 函数以接受参数(localStorage 值)

【讨论】:

  • 我对 javascript 感到很不舒服...我应该在我的代码中准确地更改什么?
  • 别担心,我也是,但 Javascript 并没有那么糟糕。您的代码不能按原样工作?你的控制台里有东西吗?
  • 请在 if 语句前加上console.log(activeTab);
  • console.log(activeTab);returns null
  • 你有多个具有相同href(#)的项目,你应该设置一个数据属性或一个ID,这样会更干净。另外,我不确定您是否使用正确的方法来获取单击链接的值。尝试在localStorage.setItem('activeTab', $(e.target).attr('href'));之前登录$(e.target).attr('href')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 2015-10-18
  • 2023-01-25
  • 1970-01-01
  • 2010-09-22
相关资源
最近更新 更多