【问题标题】:Reset form for new validation, rails 3.1重置表单以进行新验证,rails 3.1
【发布时间】:2011-12-26 12:59:34
【问题描述】:

在我的 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()

【问题讨论】:

  • 如果您提供的代码不起作用,将会有所帮助。

标签: reset client-side-validation rails-3.1


【解决方案1】:

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

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

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

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

页面加载后如下所示:
$('#edit_event_title').data()
对象
验证:真
原型:对象

现在,如果您输入一些无效数据并使用the default error rendering 离开该字段,它将显示一些错误字段。它还会将您的元素更新为:
$('#edit_event_title').data()
对象
已更改:假
有效:假

验证:真
原型:对象

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

【讨论】:

  • 我找到了与您的类似的解决方案 - 我调用 .change() 到已验证表单上的每个输入并重置值,因此验证再次开始工作
  • FWIW 我发现上面带有 removeData 和触发器的 Ryanon 解决方案有效,Link_er 的解决方案不适用于我的特定情况。 YMMV。
猜你喜欢
  • 1970-01-01
  • 2014-02-04
  • 2014-07-25
  • 2016-07-16
  • 2019-02-08
  • 2013-03-17
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多