2009-11-13 15 views
1

我想對錯誤消息使用一些Scriptaculous效果。如何在錯誤消息上使用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。

或者我應該把一些if條件放入視圖並從那裏調用它們。順便說一下,我不知道如何做到這一點。我們不能做像f.error_message_on "name", :visual_effect => ...任何幫助將不勝感激。

回答

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

你可以得到一個unobtrusive plugin包括lowpro爲你。欲瞭解更多信息Peepcode關於lowpro有一個很好的pdf,以及一些關於JavaScript的好屏幕錄像。

+0

也許挑剔,但「javascript_file_for_form_actions.js」是什麼?顯然這是一個文件,顯然它是javascript(由於.js擴展名),那麼爲什麼要重複這些呢?怎麼樣「form_actions.js」? – ScottJ 2009-11-13 21:52:17

+0

我剛剛選擇了它,以便在我的解釋中清楚。而不是使用評論。我實際上不會將其命名。 – coreypurcell 2009-11-16 12:23:21

+0

它實際上應該被編輯爲form_behaviors.js,它位於content_for部分。所以我現在編輯它。 – coreypurcell 2009-11-16 12:25:44

0

只要把你的錯誤信息以可識別的元素,如:

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

然後,在JavaScript,你可以這樣做:

$('bob').blindUp(); 
相關問題