【问题标题】:Javascript not executing in rails view partialJavascript未在rails视图中执行
【发布时间】:2019-08-26 17:18:22
【问题描述】:

我使用了引导导航栏,但是我需要在不同的导航项单击时更改活动类,但是当单击其他导航项时,活动类没有被应用/添加,它保持静态。

部分视图的一些摘录是->

  <nav class="navbar navbar-expand navbar-light  fixed-top" id="topheader">
    <section class="container d-flex">
      <span class="navbar-brand mb-0 h1 a">Project Manager</span>

      <ul class="navbar-nav mr-auto">
        <li class="nav-item active" id="project-nav" onclick= "change2()">
          <%= link_to "Project", projects_path, class: "nav-link" %>
        </li>
        <li class="nav-item" id="user-nav" onclick= "change()">
          <%= link_to "user", users_path, class: "nav-link" %>
        </li>

      </ul>

所以我尝试通过在 application.js 中编写来实现 js,但没有成功

$(".navbar-nav .nav-item").on("click", function(){
   $(".navbar-nav").find(".active").removeClass("active");
   $(this).addClass("active");
});

我也试过了

function change(){
  document.getElementById("project-nav").className.replace(" active", "");
  document.getElementById("user-nav").className += " active ";
}

但是类并没有改变——似乎 onclick 事件根本没有被执行

【问题讨论】:

  • 你在document.ready函数中添加了点击功能和javascript代码吗?
  • 我已经给出了我尝试过的所有相关代码
  • 您是否收到任何 JavaScript 错误?如果添加警报,页面加载时是否会看到该警报?您是否通过查看页面源代码并打开 JavaScript 文件来找到您的 JavaScript 代码?在开发者工具 -> 调试器中添加断点会发生什么?
  • 你确定在你的 application.js 文件中需要 jqueryjquery-ujs 吗?除非您这样做,否则您的第一个示例将不起作用,并将点击侦听器包装在 $(document).ready() 支票中
  • 是的,我有 jquery 和 jquery-ujs

标签: javascript ruby-on-rails ruby-on-rails-5 nav


【解决方案1】:

导致问题的原因是:

<%= link_to "Project", projects_path, class: "nav-link" %>

还有这个:

<%= link_to "user", users_path, class: "nav-link" %>

所以,当您点击nav-item 时,它实际上会重定向到projects_pathusers_path,这取决于您点击的是哪个链接。

这段代码:

$(".navbar-nav .nav-item").on("click", function(){
  $(".nav-item").not(this).removeClass('active');
  $(this).addClass("active");
});

如果你有这样的代码结构就可以工作:

<ul class="navbar-nav mr-auto">
  <li class="nav-item"> Project </li>
  <li class="nav-item" > User </li>
</ul>

因此,如果您只想将类 active 添加到导航栏中的活动链接中,您可以这样做:

  1. HTML 文件:
<nav class="navbar navbar-expand navbar-light  fixed-top" id="topheader">
  <section class="container d-flex">
    <span class="navbar-brand mb-0 h1 a">Project Manager</span>

    <ul class="navbar-nav mr-auto">
      <li class="nav-item">
        <%= link_to "Project", projects_path, class: "nav-link" %>
      </li>
      <li class="nav-item" >
        <%= link_to "user", users_path, class: "nav-link" %>
      </li>
          .....
     </ul>
  </section>
</nav>
  1. 在JS文件中:
$(document).on("turbolinks:load", function () {
  $('.nav-item a[href="' + this.location.pathname + '"]').parent().addClass('active');
});

参考资料:

How to get Twitter-Bootstrap navigation to show active link?

https://guides.rubyonrails.org/working_with_javascript_in_rails.html

【讨论】:

  • 非常感谢您付出了这么多努力,确实奏效了
  • 您能告诉我如何在页面加载时激活我的导航项集之一吗?
  • 这是我的荣幸。这段代码应该这样做。当页面加载时,它应该找到具有特定路径的锚标记的 .nav-item,并将类 .active 添加到 .nav-item。你试过了吗?
  • 是的,但是第一次加载页面时没有选择任何项目,否则它工作正常@violeta
  • 你的根路径有没有这个:&lt;li class="nav-item"&gt; &lt;%= link_to "Home", root_path, class: "nav-link" %&gt; ? &lt;/li&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 2017-03-29
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多