2012-04-02 66 views
1

在我的Rails 3.2.3應用程序,我已經在application.html.erb下面的代碼刷新整個頁面每隔30秒:如果頁面上沒有輸入字段,元刷新?

<meta http-equiv="refresh" content="30"> 

它運作良好,(它是一個內部網,我們需要做無論他們在他們的計算機上打開頁面多久,每個人都在查看最新信息),而任何更復雜的內容(例如AJAX)都是不必要的。

我希望做的是有某種「除非」語句包裝meta標籤,如:

<% unless page.contains('input') %> 
    <meta http-equiv="refresh" content="30"> 
<% end %> 

這將阻止頁面30秒後清爽如果頁面包含一個表單輸入字段。目前,即使您填寫頁面的一半,頁面仍會刷新。

就是這樣的可能。我意識到上面的代碼示例永遠不會工作,這純粹是解釋我想要實現的。

一種可能性是檢查當前頁面的行動是什麼作爲documentation說:

<% current_page?(:action => 'new') %> 

,但我不能完全肯定是否會工作。

回答

1

我可能會用腳本來處理這個問題,並刪除<meta http-equiv='refresh'>標記。

var reloadTime = 30; 
body.onload = function() { 
    // Reload after 30s if no input tags are found 
    if (document.getElementsByTagName("input").length === 0) { 
    setTimeout(function() {window.location.reload(true);}, reloadTime); 
    } 
}; 

如果你正在使用jQuery或其他庫,把這段DOM準備功能,如:

$(document).ready(function() { 
    var reloadTime = 30; 
    if ($("input").length === 0) { 
     setTimeout(function() {window.location.reload(true);}, reloadTime); 
    } 
}); 
+0

如果我使用jQuery我可以離開了原來的meta標籤,然後添加你的我現有的DOM就緒函數的第二個代碼示例,還是我需要第一個示例? – dannymcc 2012-04-02 16:33:07

+0

@dannymcc如果已經使用jQuery,則只需要第二個代碼示例,並應刪除原始元刷新標記。 – 2012-04-02 16:35:15

+0

如果我使用第二個示例,我可以在何處爲沒有輸入的頁面設置重新加載時間。假設我已經刪除了原始的元刷新標籤? – dannymcc 2012-04-02 16:41:51