繁体   English   中英

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

[英]jQuery ready event does not fire on every page load when placed in HEAD in Rails

我在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是一种客户端技术?

来自RailsApps项目

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM