1

我想对错误消息使用一些 Scriptaculous 效果。

<% form_for(@page) do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %>
    <%= f.error_message_on "name" %>

    <%= f.label :content %>
    <%= f.text_field :content %>
    <%= f.error_message_on "content" %>

    <%= f.submit 'Create' %>
<% end %>

我的第一个想法是将错误消息放入 div 标签并在控制器中使用 page.visual_effect 。但我不知道如何选择会受到影响的正确 div。

<% form_for(@page) do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %>
    <div id="errorname"><%= f.error_message_on "name" %></div>

    <%= f.label :content %>
    <%= f.text_field :content %>
    <div id="errorcontent"><%= f.error_message_on "content" %></div>

    <%= f.submit 'Create' %>
<% end %>

或者我应该考虑一些条件并从那里调用它们。顺便说一句,我不知道该怎么做。我们不能做类似的事情f.error_message_on "name", :visual_effect => ... 任何帮助将不胜感激。

4

2 回答 2

1

包装在 div 中的方法是正确的,但是您可以在视图中这样做:

<%= f.error_message_on "name",
      :css_class => "inputError" %>

可能有很多方法可以做到这一点。让控制器返回 rjs 是一种方法。为了不引人注目,被认为是最佳实践,您需要包含一个 javascript 文件,该文件在页面加载时触发 scriptaculous 方法。我将低专业库用于不显眼的 javascript。这是我的建议:

布局文件:

<%= javascript_include_tag :defaults, ‘lowpro’, 'form_behaviors.js' %>

javascript_file_for_form_actions.js:

Event.addBehavior({ 
  '.inputError' : function() {
    this.hide();
    this.blindUp();
  }
});

您还可以使用 content_for 有条件地加载 javascript 文件并更改布局文件。

查看文件:

<% content_for(:javascript) do %> <%= javascript_include_tag “form_behaviors” %>
<% end %>

布局文件中的某处:

<% yield :javascript %>

您也可以获得一个包含 lowpro的不显眼的插件。欲了解更多信息, Peepcode有一个关于 lowpro 的很好的 pdf,以及一些关于 javascript 的很好的截屏视频。

于 2009-11-13T16:13:45.750 回答
0

只需将您的错误消息放在可识别的元素中,例如:

<div id="bob">error messages here</div>

然后在您的 javascript 中,您可以执行以下操作:

$('bob').blindUp();
于 2009-11-13T15:22:18.713 回答