如何对错误消息使用 Scriptaculous 效果

发布于 2024-08-10 22:33:42 字数 1007 浏览 3 评论 0原文

我想对错误消息使用一些 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 %>

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

I want to use some Scriptaculous effects on error messages.

<% 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 %>

My first idea is to put error messages into div tags and use page.visual_effect in the controller. But I don't know how to choose correct divs that will be affected.

<% 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 %>

Or should I put some if conditions into view and call them from there. By the way I don't know how to that. Can't we do something like f.error_message_on "name", :visual_effect => ... Any help will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

祁梦 2024-08-17 22:33:42

您在 div 中换行的做法是正确的,但是您可以在视图中这样做:

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

可能有很多方法可以做到这一点。让控制器返回 rjs 是一种方法。为了不引人注目(被认为是最佳实践),您需要包含一个 javascript 文件,该文件在加载页面时会触发 scriptaculous 方法。我使用 low pro 库来实现不显眼的 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 %>

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

You are on the right track with wrapping in divs, but you can do it this way in the view:

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

There are probably many ways to do it. Having the controller return rjs is one way. To be unobtrusive, considered best practice, you would need to include a javascript file that fires the scriptaculous method when the page is loaded. I use the low pro library for unobtrusive javascript. Here is my suggestion:

layout file:

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

javascript_file_for_form_actions.js:

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

You could also conditionally load the javascript file using content_for and change your layout file.

View file:

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

Somewhere in Layout file:

<% yield :javascript %>

You can get a unobtrusive plugin that includes lowpro for you as well. For more information Peepcode has a good pdf about lowpro, as well as some good screencasts on javascript.

北恋 2024-08-17 22:33:42

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

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

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

$('bob').blindUp();

Just put your error message in an identifiable element such as:

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

Then in your javascript you could do something like:

$('bob').blindUp();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文