Javascript Rails 5 Jquery停止重定向工作

Javascript Rails 5 Jquery停止重定向工作,javascript,jquery,html,ruby-on-rails,sass,Javascript,Jquery,Html,Ruby On Rails,Sass,因此,我正在使用Rails5.1创建一个web应用程序,并使用CSS复选框来打开一个导航菜单 我在根路径上有一个按钮,单击该按钮时,使用Jquery从另一个区域选中该框。当我转到另一个页面时,它会停止工作。但是当我单击按钮记录复选框是否选中时,控制台仍然输出true/false。因此,按钮功能似乎在单击时起作用,但复选框不显示为选中 我花了很多时间玩jquery,关闭home按钮上刷新的TurboLink,等等。我很好奇是否有人有办法解决这个问题,或者rails 5是否对这些东西很挑剔 下面是_

因此,我正在使用Rails5.1创建一个web应用程序,并使用CSS复选框来打开一个导航菜单

我在根路径上有一个按钮,单击该按钮时,使用Jquery从另一个区域选中该框。当我转到另一个页面时,它会停止工作。但是当我单击按钮记录复选框是否选中时,控制台仍然输出true/false。因此,按钮功能似乎在单击时起作用,但复选框不显示为选中

我花了很多时间玩jquery,关闭home按钮上刷新的TurboLink,等等。我很好奇是否有人有办法解决这个问题,或者rails 5是否对这些东西很挑剔

下面是_index.html.erb中两个按钮的代码片段

  <div class="index__content--buttons">
    <%= link_to("Find Out More", root_path, :class => "btn btn--primary", data: { no_turbolink: true }) %>
    <%= link_to("Explore the Culture", "javascript:void(0)", :class => "btn btn--primary", :id => "navbtn") %>
  </div>
这是整个index.js

  $(document).ready(function() {
    const navigation = document.querySelector('.navigation');
    const navCheckbox = 
         navigation.querySelector('.navigation__checkbox');
    const navItems = navigation.querySelectorAll('.navigation__item');
    navCheckbox.checked = false;

    function uncheck(){ $(navCheckbox).prop('checked', false) }

    navItems.forEach(item => item.addEventListener("click", _ => 
          navCheckbox.checked = false));

    $(document).on("click", "#navbtn", function (){
       uncheck();
       console.log(navCheckbox['checked'] === true);

       $(navCheckbox).prop('checked', true);    
       console.log(navCheckbox['checked'] === true);
    });
});
值得注意的是,实际的复选框按钮和标签始终有效。单击导航链接后,将取消选中navItems for循环

此外,我使用的jquery3还有gem'jquery rails',application.js:

    //= require jquery3
    //= require jquery_ujs
    //= require turbolinks
    //= require_tree .
那么为什么根路径重定向会失败呢? 编辑:刚刚测试过,任何重定向后都不起作用

tldr:jquery在第一次访问时工作。然后不选中复选框,而是在任何重定向上记录正确的状态


提前感谢

这可能是因为您启用了Turbolinks,这需要特别使用导航事件,而不是使用jQuery ready事件,您需要使用Turbolinks:load,如下所示:

document.addEventListener("turbolinks:load", function() {
  // Here goes your jQuery ready code
})
如果您想了解更多有关此行为的信息,请参阅文档的链接


如果替换$document会发生什么情况。准备好了吗。。。使用TurboLinks aware等效的$document.on'TurboLinks:load',…?感谢您的快速响应和链接。
document.addEventListener("turbolinks:load", function() {
  // Here goes your jQuery ready code
})