1

在我的 rails 3.1 应用程序中,我有一个需要多次使用的表单。我有一个项目组列表和下面的新表格。创建后,我在所有现有组之后渲染新组并执行 $('#new_project_group')[0].reset()。它使表单为空,但我有验证问题。

我使用客户端验证 gem,第二次验证不起作用。我认为这是因为第一次字段已填写,第二次不再验证。

有人知道如何使用验证重置表单吗?

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()
4

1 回答 1

2

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

用户单击链接并弹出带有表单的模态
用户填写无效数据然后关闭模态
-此时我想清除表单的所有错误-
用户将表单打开为新表单

我是在 FIELD 级别完成的,因为我只有 5 个字段中的 2 个字段我想从中清除错误。它可能可以在表单级别完成,但是我从未尝试过。

客户端验证的工作原理是将数据存储在实际元素上(这是一个文本输入),如下所示:
$('#edit_event_title').data();

当页面加载时,它看起来像这样:
$('#edit_event_title').data()
Object
validate: true
proto : Object

现在,如果您输入一些无效数据并使用默认错误呈现离开该字段,它将显示一些错误字段。它还将您的元素更新为:
$('#edit_event_title').data()
Object
changed: false
valid: false

验证:真
原型:对象

现在我们需要删除标记为有错误的字段(并删除错误文本)是删除数据中添加的 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。

于 2012-04-06T23:09:54.327 回答