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 に答える