点击rails link_to后,jQuery就不会被触发了

即时通讯使用下面的JavaScript来使图像“淡入”由滚动事件触发。 但是,用于最初隐藏图像的.hide仅在页面最初加载时才有效,输入localhost:3000。

一旦我在网站上,如果我尝试点击链接返回主页面,

 

主页加载.hide工作

为什么.hide在页面最初加载时工作,但是如果我点击指向同一页面的链接,则.hide不起作用。 Javascript的其余部分无论如何都可以工作,我可以滚动,图像会根据滚动位置淡入淡出,但是我需要它才能开始隐藏,而且只有在页面加载时才有效

 function isElementVisible(elementToBeChecked) { var TopView = $(window).scrollTop(); var BotView = TopView + $(window).height(); var TopElement = $(elementToBeChecked).offset().top + 100; var BotElement = TopElement + $(elementToBeChecked).height(); return ((BotElement = TopView)); } $(document).ready(function(){ $("#ghost_logo").hide();// hide it initially }); $(window).scroll(function(){ isOnView = isElementVisible("#logoDiv"); if (isOnView) { //fade out small image once main logo is in view $('#ghost_logo').fadeOut(); } else { //fade in small image once main logo is out of view $('#ghost_logo').fadeIn(); } }); 

你对turbolink有一个典型的问题,turbolinks使你在浏览链接时没有改变DOM,因此,来自jQuery的ready事件永远不会被触发,你可以通过三种方式解决这个问题。

您可以尝试以下方法:

 document.addEventListener('page:load', function(){ $("#ghost_logo").hide(); }); 

或者如果这也不起作用,尝试使用turbolinks导航更改链接参数:

  <%= link_to 'Main', root_path ,{ :'data-no-turbolink' => "true" } %> 

或者如果你想要你可以使用这个jQuery-turbolinks gem是为解决这类问题而提供的gem。

有关更多信息,请参阅github上的turbolinks存储库