【发布时间】:2013-07-19 12:53:41
【问题描述】:
在 Rails 中使用 jQuery 就绪事件时,我注意到一些奇怪的事情。如果将处理程序添加到<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 是一种客户端技术?
【问题讨论】:
-
当您说
explicit browser actions to load/refresh a page will execute it和new page views triggered from clicking around on links will not时,您的页面是如何设置的?单击链接实际上会加载一个新页面,还是会抓取一个页面并将其插入到 dom 中? -
@Toiletduck- 你问的是 AJAX 吗?不,它们是标准页面加载。
-
Rails 无法影响这一点,除非没有包含代码。您是否从客户端(浏览器)检查过一切都如您所愿?
-
因为它们都应该可以正常工作。
-
是的,我在问您是否使用了 AJAX 请求。否则,您的代码没有任何问题,除非您的脚本不在所有页面的头部。
标签: javascript jquery ruby-on-rails document-ready