6

如果我使用 ajax 请求获取 simple_form,客户端验证 gem 不起作用..

<%= link_to 'Add +', new_group_path, :remote => true, :id => "new_group_link" %>

现在表单新组将显示并且它不会触发客户端验证。

我遇到了客户端功能未与表单绑定的问题。(JavaScript 资产中指定的函数。)

但是我如何触发这些功能.??

编辑

想想标准的脚手架形式。因此,根据上面指定的 link_to 标记。new_group_path 将执行新操作并使用 respond_to 块,将呈现 new.js.erb 文件。对。这是 new.js.erb 中的代码

  $('#new_group_link').hide().after('<%= j render("form") %>');
4

3 回答 3

12

当你得到一个带有 ajax 的表单时,你应该自己启用客户端验证。这是链接

$(new_form).enableClientSideValidations();
于 2012-12-25T09:30:30.463 回答
3

如果您希望客户端验证触发通过 ajax 加载的所有表单,请在 main.js 中的某处使用:

$(document).ajaxSuccess(function(){
    if($('form[data-validate]').length){
        $('form[data-validate]').enableClientSideValidations();
    }
});

当然,你应该有:validate => true这个工作的形式。

于 2013-06-27T05:26:06.820 回答
1

从文档中发现:


在您的 Gemfile 中添加以下内容:

gem 'simple_form'
gem 'client_side_validations'
gem 'client_side_validations-simple_form'

Order matters here. SimpleFormClientSideValidations

需要 required before ClientSideValidations-SimpleForm


在您的 FormBuilder 中,您只需要启用验证:

<%= form_for @user, :validate => true do |f| %>

这应该足以让你继续前进。

默认情况下,验证器将被序列化并嵌入到<script>标签后面的标签中。如果您想在<script>其他地方呈现该标签,您可以通过将名称传递给:validate

<%= form_for @user, :validate => :user_validators do |f| %>

如果您通过 AJAX 将新表单呈现到页面中,则需要启用该表单以进行验证:

$(new_form).enableClientSideValidations();

您应该将此附加到新 HTML 呈现时触发的事件。

如果向现有表单引入新输入,则可以使用相同的函数:

$(new_input).enableClientSideValidations();
于 2012-12-28T12:13:44.107 回答