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