2011-12-26 75 views
1

在我的導軌3.1應用程序中我有一種窗體需要多次使用。我在下面列出了一些項目組和表格。創建後,我現在渲染新組,並執行$('#new_project_group')[0] .reset()。它使表單爲空,但我在驗證方面存在問題。重新設置窗體以進行新的驗證,導軌3.1

我使用客戶端驗證寶石和第二次驗證不起作用。我認爲這是因爲一次場填補了,第二次沒有驗證。

有人知道如何重置窗體與驗證?

UPD 這是另一個模型的代碼,但有同樣的問題。在這裏,我使用窗體渲染對話框,添加對話框後隱藏。下一次,我只是用復位的形式打開相同的對話框。

控制器:

class Accounts::FeedbackMessagesController < Accounts::ApplicationController 
defaults :resource_class => FeedbackMessage 
load_resource :feedback_message 
respond_to :js 

def create 
    @feedback_message.user_id = current_user.id 
    @feedback_message.user_email = current_user.email 
    @feedback_message.user_name = current_user.full_name 
    create! 
end 
end 

形式:

<%= semantic_form_for resource, :remote => true, :validate => true do |f| %> 
<%= f.inputs do %> 
    <%= f.input :description, :input_html => {:id => 'test'} %> 

     <br/> 
    <div class="links"> 
     <%=link_to_add_association t('asset.add'), f, :assets %> 
    </div> 

<%end%> 
<%= f.buttons do %> 
    <%= f.commit_button :button_html => { :disable_with => "#{t('share.wait')}" } %> 
<% end %> 
<% end %> 

new.js.coffee:

if $('#feedback_dialog').html() == "" 
$('#feedback_dialog').html('<%= escape_javascript(render 'form') %>').dialog(
    open: -> 
    $('form[data-validate]').validate() 
    close: -> 
    $("#feeadback_dialog_link").click -> 
     $('#feedback_dialog').dialog "open" 
     return false 
) 
else 
$('#feedback_dialog').dialog "open" 

create.js.coffee:

$('#feedback_dialog').dialog "close" 
    $('#new_feedback_message')[0].reset() 
+0

如果您提供的代碼不起作用,這將有所幫助。 – 2012-03-10 19:06:28

回答

2

我有一個非常類似的問題:

用戶點擊鏈接和彈出了模態與形式的無效數據
用戶填寫,然後關閉模式
--At這一點我想清除所有的錯誤表格 -
用戶打開窗體到一個新的表格

我做了它在FIELD級別,因爲我只有2個字段中的5我想清除錯誤。它可能可以在表單級完成,但我從來沒有嘗試過。 。

如何驗證客戶方的工作是它存儲的實際元素上的數據(這是一個文本輸入),像這樣:
$(「#edit_event_title」)數據();

頁面加載時它看起來像這樣:
$( '#edit_event_title')數據()
對象
驗證:真
:對象

現在,如果你一拳在一些無效的數據中,並使用the default error rendering離開該字段,它將顯示一些錯誤字段。它也更新你的元素:
$('#edit_event_title')。數據()
對象
改變:假
有效:假

驗證:真
原:對象

現在我們需要做刪除標記爲具有錯誤的場(和刪除錯誤文本)是刪除數據中添加的2個字段,並運行內置於client_side_validations中的函數gem:

$('#edit_event_title').removeData("changed"); 
$('#edit_event_title').removeData("valid"); 
$('#edit_event_title').trigger('element:validate:pass') 

從我可以告訴實際庫「rails.validations.js」/ client_side_validation gem沒有任何特定的功能來按需刪除錯誤(一切看起來都在回調中)。

如果有人有更好的解決方案,請讓我知道。否則,上述將允許您根據需要刪除client_side_validations。

+0

我發現類似於你的解決方案 - 我將.change()調用到經過驗證的表單上的每個輸入,並且值被重置,因此驗證開始再次運行 – 2012-04-11 11:21:56

+0

FWIW我發現Ryanon的解決方案與removeData和trigger一起工作,Link_er的解決方案沒有爲我的特殊情況工作。因人而異。 – 2012-09-20 10:54:21