簡體   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