当放置在Rails中的HEAD中时,jQuery ready事件不会在每个页面加载时触发

时间:2013-07-19 12:53:42

标签: javascript jquery ruby-on-rails document-ready

我在Rails中使用jQuery ready事件时注意到一些奇怪的事情。如果处理程序添加到<head>部分,直接在脚本标记内或使用<%= javascript_include_tag ...包含的资产管道文件中,它将仅在第一页请求上执行,而不在后续请求上执行。也就是说,加载/刷新页面的显式浏览器操作将执行它,但是通过点击链接触发的新页面视图不会执行。

另一方面,如果它包含在<body>中,则每次在每个页面视图中都会触发它 - 就像您期望的那样。

<head>
<script>
jQuery(document).ready(function(){
    console.log('READY in head'); // Fires on first page load only
});
</script>
</head>

<body>
<script>
jQuery(document).ready(function(){
    console.log('READY in body'); // Fires every time
});
</script>
</body>

真的很困惑。我在所有的Rails应用程序中都看到了它,但是不了解Rails如何影响这一点,因为jQuery是一种客户端技术?

2 个答案:

答案 0 :(得分:3)

来自RailsApps Project

  

Rails资产管道在Rails 4.0中将变得更加重要   使用新的Turbolinks功能。 Turbolinks通过提高性能   使当前页面实例保持活动状态并仅替换页面   BODY(加上HEAD中的标题)。只要HEAD元素是   页面之间相同,Turbolinks机制可以提供它   “涡轮增压”速度提升。这增加了避免任何额外的重要性   特定页面上的脚本标记。

答案 1 :(得分:1)

如你所说,使用AJAX(或turbolinks)实际上不会加载新页面,而是将其插入到dom中。因此,就绪事件不会触发。 :)