我在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是一种客户端技术?
答案 0 :(得分:3)
Rails资产管道在Rails 4.0中将变得更加重要 使用新的Turbolinks功能。 Turbolinks通过提高性能 使当前页面实例保持活动状态并仅替换页面 BODY(加上HEAD中的标题)。只要HEAD元素是 页面之间相同,Turbolinks机制可以提供它 “涡轮增压”速度提升。这增加了避免任何额外的重要性 特定页面上的脚本标记。
答案 1 :(得分:1)
如你所说,使用AJAX(或turbolinks)实际上不会加载新页面,而是将其插入到dom中。因此,就绪事件不会触发。 :)