如果页面上没有输入字段,则进行元刷新?

时间:2012-04-02 16:20:26

标签: ruby-on-rails-3 refresh meta-tags page-refresh

在我的Rails 3.2.3应用程序中,我在application.html.erb中有以下代码,每隔30秒刷新整个页面:

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

它运行良好(它是一个内部Intranet,我们需要确保每个人都在查看最新信息,无论他们在计算机上打开的页面有多长时间),而且任何更复杂的东西,例如AJAX,都是不必要的。

我想要做的是使用某种'unless'语句包装元标记,例如:

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

如果页面包含表单输入字段,这将阻止页面在30秒后刷新。即使您正在填写页面的一半,页面也会刷新。

这样的事情是否可行。我意识到上面的代码示例永远不会起作用,它纯粹是为了解释我想要实现的目标。

一种可能性是检查documentation中所述当前页面的操作:

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

但我不完全确定这是否会奏效。

1 个答案:

答案 0 :(得分: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);
   }  
});