重新设置窗体以进行新的验证,导轨3.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

我有一个非常类似的问题:

用户点击链接和弹出了模态与形式的无效数据
用户填写,然后关闭模式
--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