【问题标题】:Jquery nav toogle class active doesn't work after link click单击链接后,Jquery nav 切换类活动无效
【发布时间】:2020-09-09 13:29:54
【问题描述】:

我有问题,我的导航有 class="active" 或 inactive 的链接我写了 jquery 脚本,当你点击链接最后一个活动变为不活动并且点击变为活动时问题是当我点击脚本只工作半秒和页面刷新和链接丢失以前的类。登录后第一个链接应该始终处于活动状态,因为登录首先会重定向到他

导航代码

$(document).ready(function() {
  $(function() {
    var sidebar = $("#sidebar");
    sidebar.delegate("a.inactive", "click", function(event) {
      event.preventDefault();
      sidebar.find(".active").toggleClass("active inactive");
      $(this).toggleClass("active inactive");
    });
  });
});
.active { background-color: yellow; }
.inactive { background-color: grey; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="sidebar" class="nav-wrapper">
  <ul class="nav flex-column">
    <li class="nav-item">
      <a class="nav-link active" href="{{ route('home') }}">
        <i class="material-icons">edit</i>
        <span>Darbuotojai</span>
      </a>
    </li>
    <li class="nav-item">
      <a class="nav-link inactive" href="{{ url('/naujas') }}">
        <i class="material-icons">vertical_split</i>
        <span>Naujas darbuotojas</span>
      </a>
    </li>
    <li class="nav-item">
      <a class="nav-link inactive" href="{{ url('/imones') }}">
        <i class="material-icons">note_add</i>
        <span>Įmonės</span>
      </a>
    </li>
    <li class="nav-item">
      <a class="nav-link inactive" href="{{ url('/padaliniai') }}">
        <i class="material-icons">note_add</i>
        <span>Padaliniai</span>
      </a>
    </li>
  </ul>
</div>
好吧,我希望找到 jquery 解决方案,因为我在 Blade 中只找到了 laravel 解决方案,如下所示:
@if (\Request::is('home'))  
      <li class="nav-item">
        <a class="nav-link active" href="{{ route('home') }}">
          <i class="material-icons">edit</i>
          <span>Darbuotojai</span>
        </a>
      </li>
      @else
      <li class="nav-item">
        <a class="nav-link inactive" href="{{ route('home') }}">
          <i class="material-icons">edit</i>
          <span>Darbuotojai</span>
        </a>
      </li>
@endif

【问题讨论】:

    标签: jquery navigation


    【解决方案1】:

    .delegate 已弃用

    改为使用

    sidebar.on("click","a.inactive", function (event) { 
    

    同时删除 $(document).ready(function() { }) - 不需要

    添加sessionStorage处理以保持状态

    $(function() {
      const $sidebar = $("#sidebar");
      $sidebar.on("click", "a.inactive", function(event) {
        event.preventDefault(); // this statement will make the link NOT work
        $sidebar.find(".active").toggleClass("active inactive");
        $(this).toggleClass("active inactive");
      });
      $sidebar.on("click", "a.active", function(event) {
        // sessionStorage.setItem("active",$(this).index()); // does not work in a snippet  - uncomment on your page
      })
      const idx = 2; // sessionStorage.getItem("active") || 0; // uncomment and remove "2"
      $sidebar.find(".active").toggleClass("active inactive");
      $sidebar.find(".nav-link").eq(idx).toggleClass("active inactive");
    });
    .active {
      background-color: yellow;
    }
    
    .inactive {
      background-color: grey;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="sidebar" class="nav-wrapper">
      <ul class="nav flex-column">
        <li class="nav-item">
          <a class="nav-link active" href="{{ route('home') }}">
            <i class="material-icons">edit</i>
            <span>Darbuotojai</span>
          </a>
        </li>
        <li class="nav-item">
          <a class="nav-link inactive" href="{{ url('/naujas') }}">
            <i class="material-icons">vertical_split</i>
            <span>Naujas darbuotojas</span>
          </a>
        </li>
        <li class="nav-item">
          <a class="nav-link inactive" href="{{ url('/imones') }}">
            <i class="material-icons">note_add</i>
            <span>Įmonės</span>
          </a>
        </li>
        <li class="nav-item">
          <a class="nav-link inactive" href="{{ url('/padaliniai') }}">
            <i class="material-icons">note_add</i>
            <span>Padaliniai</span>
          </a>
        </li>
      </ul>
    </div>

    【讨论】:

    • 这行不通。现在我必须点击链接两次才能使其工作,当我激活链接时,同样的情况导航会回到他的起点。也许是因为我包含了部分导航。
    • 你运行了我的 sn-p 吗?它似乎按预期工作
    • 是的,尝试点击您的链接两次。仅在您第二次点击时才有效
    • 我点击每个链接的右侧,第一次点击颜色会改变
    • event.preventDefault(); 将在墨水处于非活动状态时停止工作 - 不确定您预期会发生什么 - 链接仅在处于活动状态时才有效
    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2021-10-11
    • 2020-09-11
    相关资源
    最近更新 更多